0

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

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

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

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

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

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

4

1 回答 1

1

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

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

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

于 2017-05-27T04:03:30.267 回答