将临时/机器生成的密码作为明文存储在数据库中会有多少安全问题?
我知道密码应该使用带盐的单向散列函数加密。对于用户提供的密码尤其如此,因为用户通常一遍又一遍地重复使用它们。如果数据库被盗,小偷可能能够访问第三方网站上的用户用户帐户,例如:公用事业账单,社交网络,甚至网上银行的潜力。
将临时/机器生成的“欢迎”或“重置”密码存储为数据库中的明文是多少问题?密码将通过电子邮件发送给用户,登录后必须更改。然后他们提供的密码将被散列。
我问的原因是存在一些很好的属性来存储临时密码作为明文。例如,如果用户没有收到“欢迎”或“重置”电子邮件,管理员可以快速查找他们的临时密码。
因为临时密码是机器生成的,如果数据库被盗,小偷将无法访问用户登录的任何第三方网站。然而,小偷可以登录到生成临时密码的应用程序。
将这些密码分配一个小的“到期”会限制曝光率,但总的来说我只是想看看这种方法有多危险。
答案 0 :(得分:7)
您不应以纯文本格式存储机器生成的密码。
让我们看看攻击者可以做什么,如果他以某种方式获得了对SQL注入的数据库的读访问权限(我做了一个小demo SQL注入是多么容易,只需单击下一个箭头即可得到恶意输入。)
具有读取权限的攻击者可能要求为他喜欢的任何电子邮件地址重置密码。因为他可以在数据库中看到新生成的令牌,所以他可以使用此令牌调用重置页面,因此可以更改此用户的密码。不必说,他现在可以冒充原始用户了。
处理令牌就像其他所有密码一样,即使它不能在其他网站上使用。用户帐户可访问的数据可能包含其他数据(如生日,真实姓名),可用于破解其他网站。
答案 1 :(得分:5)
绝对不能 将密码存储在数据库中,更不用说纯文本了。你应该存储它们的哈希值。有关原因,请参阅this answer。然后,您需要围绕该事实构建所有密码重置工具。另请参阅this answer有关密码重置功能的信息。