我有一个在本地运行的应用程序并且要访问该应用程序,用户必须使用用户名和密码登录。在登录时,提供的密码将被哈希并与现有的哈希密码进行比较。
应用程序使用数据库并将用户凭据存储在users表中。 users表具有用于存储用户ID,用户名和用户的单向散列密码的列。
应用程序在用户创建或用户更改密码时哈希用户密码。 散列为具有相同密码的两个用户返回不同的哈希值。散列密码与用于散列密码的迭代次数(随机生成)一起存储在表中。示例:2CF7C.ABLK / hrjy ... zCOI5A =
我发现的一个弱点是,如果数据库被现有用户破坏,该用户可以使用自己的密码更新其他用户的密码。然后,恶意用户可以使用受感染用户的凭据来访问该应用程序。
为了缓解这个弱点,我打算对用户ID,用户名或两者进行哈希处理,并将它们与密码一起存储。登录时,会检查散列的用户ID和密码,如果它们不匹配,则登录失败。
是否有更好的替代方法来解决这个弱点?
答案 0 :(得分:1)
如果攻击者可以访问数据库并且用自己的密码替换某个用户A的密码,那么攻击者可以使用自己的密码以用户A身份登录。
要避免此类问题,您应该保护您的应用程序免受SQL注入攻击。这将减少数据库遭到入侵的可能性。
您可以采取的另一项预防措施是在您的网站上使用多重身份验证。 https://en.wikipedia.org/wiki/Multi-factor_authentication。即使用户能够破坏您的数据库并更新其他用户的密码,他仍然必须通过其他身份验证方案。