security - 临时密码安全 - 以纯文本形式存储

标签 security hash passwords cryptography

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

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

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

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

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

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

最佳答案

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

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

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

像处理其他密码一样处理 token ,即使它不能在其他网站上使用。用户帐户可访问的数据可能包含其他数据(如生日、真实姓名),这些数据可用于攻击其他网站。

关于security - 临时密码安全 - 以纯文本形式存储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19308355/

相关文章:

使用 HMAC+nonce 存储 PHP 密码 - nonce 随机性重要吗?

ios - Objective-C 中的 .hash 等同于 Swift 中的 .hashValue 吗?

c# - (.NET) 生成随机、易记密码的简单方法

通过AJAX的ASP.net MVC AntiForgeryToken

php - 将 cakephp 的 Auth 组件与加盐密码哈希一起使用

algorithm - Go:用于字符串比较的多项式指纹

c# - 如果我添加随机盐,如何检查密码是否正确?

php - 如何使用 PDO 的密码散列来使我的代码更安全?

forms - 提供请求用户信用卡信息的表单的服务器是否需要符合 PCI 标准

php - 许多哈希迭代 : append salt every time?