4

将临时/机器生成的密码作为明文存储在数据库中会有多大的安全问题?

我知道密码应该使用带盐的单向哈希函数进行加密。对于用户提供的密码尤其如此,因为用户通常会一遍又一遍地重复使用它们。如果数据库被盗,窃贼可能能够访问 3 方网站上的用户帐户,例如:水电费、社交网络,甚至是在线银行。

将临时/机器生成的“欢迎”或“重置”密码作为明文存储在数据库中会有多大的问题?密码将通过电子邮件发送给用户,并且必须在登录时更改。然后他们提供的密码将被散列。

我问的原因是有一些很好的属性可以将临时密码存储为明文。例如,如果用户没有收到“欢迎”或“重置”电子邮件,管理员可以快速查找他们的临时密码。

由于临时密码是机器生成的,如果数据库被盗,窃贼将无法访问用户登录的任何第三方网站。然而,小偷将能够登录到生成临时密码的应用程序。

为这些密码分配一个小的“过期时间”会限制暴露,但总的来说,我只是想看看这种方法会有多危险。

4

2 回答 2

7

您甚至不应该以纯文本形式存储机器生成的密码。

让我们看看攻击者可以做什么,如果他以某种方式通过 SQL 注入仅获得对您的数据库的读取访问权限(我做了一个小演示,SQL 注入是多么容易,只需单击下一步箭头即可获得恶意输入)。

具有读取权限的攻击者可以要求为他喜欢的任何电子邮件地址重置密码。因为他可以在数据库中看到新生成的令牌,所以他可以用这个令牌调用重置页面,因此可以更改这个用户的密码。不用说,他现在可以冒充原始用户了。

像处理其他所有密码一样处理令牌,即使它不能在其他站点上使用。用户帐户可访问的数据可能包含其他数据(如生日、真实姓名),可用于入侵其他网站。

于 2013-10-11T07:20:37.753 回答
5

绝对不能将密码存储在数据库中,更不用说以纯文本形式了。您应该存储它们的哈希值。请参阅此答案以了解原因。然后,您需要围绕该事实构建所有密码重置工具。另请参阅有关密码重置功能的答案。

于 2013-10-11T00:36:53.897 回答