【问题标题】:How to prevent user from imitating other users by updating passwords for other users?如何防止用户通过更新其他用户的密码来模仿其他用户?
【发布时间】:2017-05-26 14:47:44
【问题描述】:

我有一个在本地运行的应用程序,要访问该应用程序,用户必须使用用户名和密码登录。登录时,提供的密码经过哈希处理,并与现有的哈希密码进行比较。

应用程序使用数据库并将用户凭据存储在用户表中。 users 表具有存储用户 id、用户名和用户的单向哈希密码的列。

应用程序在用户创建或用户更改密码时对用户密码进行哈希处理。 散列为具有相同密码的两个用户返回不同的散列。散列密码与用于散列密码的迭代次数(随机生成)一起存储在表中。示例:2CF7C.ABLK/hrjy...zCOI5A=

我发现的一个弱点是,如果数据库被现有用户破坏,该用户可以使用自己的密码更新另一个用户的密码。然后恶意用户可以使用受感染用户的凭据访问应用程序。

为了缓解这个弱点,我打算对用户 ID、用户名或两者进行哈希处理,并将它们与密码一起存储。登录时,会检查经过哈希处理的用户 ID 和密码,如果不匹配,则登录失败。

有没有更好的替代方法来处理这个弱点?

【问题讨论】:

  • 一旦您的数据库受到威胁,您就不能再依赖用户数据了,因为它可能已被更改 - 在流程中添加更多步骤(例如,将用户 ID 添加为哈希盐)不会使其更难攻击者(他/她可以在同一条数据上复制所有可以复制的内容)。

标签: security password-protection password-storage


【解决方案1】:

如果攻击者可以访问数据库并将某个用户 A 的密码替换为自己的密码,那么攻击者可以使用自己的密码以用户 A 的身份登录。

为避免此类问题,您应该保护您的应用程序免受 SQL 注入攻击。这将减少您的数据库被入侵的机会。

您可以采取的另一项预防措施是在您的网站上使用多重身份验证。 https://en.wikipedia.org/wiki/Multi-factor_authentication。即使用户能够破坏您的数据库并更新其他用户的密码,他仍然必须通过其他身份验证方案。

【讨论】:

    猜你喜欢
    • 2019-03-07
    • 1970-01-01
    • 2016-07-05
    • 2013-12-04
    • 2011-04-21
    • 2012-05-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-28
    相关资源
    最近更新 更多