我有一个在本地运行的应用程序,要访问该应用程序,用户必须使用用户名和密码登录。在登录时,提供的密码被散列并与现有的散列密码进行比较。
该应用程序使用数据库并将用户凭据存储在用户表中。users 表具有存储用户 id、用户名和用户的单向哈希密码的列。
应用程序在用户创建或用户更改密码时对用户密码进行哈希处理。散列为具有相同密码的两个用户返回不同的散列。哈希密码与用于哈希密码的迭代次数(随机生成)一起存储在表中。示例:2CF7C.ABLK/hrjy...zCOI5A=
我发现的一个弱点是,如果数据库被现有用户破坏,该用户可以使用自己的密码更新另一个用户的密码。然后,恶意用户可以使用受感染用户的凭据来访问应用程序。
为了缓解这个弱点,我打算对用户 ID、用户名或两者进行哈希处理,并将它们与密码一起存储。登录时,会检查散列的用户 ID 和密码,如果它们不匹配,则登录失败。
有没有更好的方法来处理这个弱点?