【发布时间】:2017-05-26 14:47:44
【问题描述】:
我有一个在本地运行的应用程序,要访问该应用程序,用户必须使用用户名和密码登录。登录时,提供的密码经过哈希处理,并与现有的哈希密码进行比较。
应用程序使用数据库并将用户凭据存储在用户表中。 users 表具有存储用户 id、用户名和用户的单向哈希密码的列。
应用程序在用户创建或用户更改密码时对用户密码进行哈希处理。 散列为具有相同密码的两个用户返回不同的散列。散列密码与用于散列密码的迭代次数(随机生成)一起存储在表中。示例:2CF7C.ABLK/hrjy...zCOI5A=
我发现的一个弱点是,如果数据库被现有用户破坏,该用户可以使用自己的密码更新另一个用户的密码。然后恶意用户可以使用受感染用户的凭据访问应用程序。
为了缓解这个弱点,我打算对用户 ID、用户名或两者进行哈希处理,并将它们与密码一起存储。登录时,会检查经过哈希处理的用户 ID 和密码,如果不匹配,则登录失败。
有没有更好的替代方法来处理这个弱点?
【问题讨论】:
-
一旦您的数据库受到威胁,您就不能再依赖用户数据了,因为它可能已被更改 - 在流程中添加更多步骤(例如,将用户 ID 添加为哈希盐)不会使其更难攻击者(他/她可以在同一条数据上复制所有可以复制的内容)。
标签: security password-protection password-storage