2

我发现 Rails 的设计身份验证框架不会对数据库中的 reset_password_token 和 Confirmation_token 进行哈希处理?有谁知道为什么?

显然,将这​​样的值以纯文本形式存储在数据库中是一种不好的方法,因为有权访问数据库的每个人都可以重用令牌并将它们直接发送到 API(例如,可以轻松触发密码重置,而无需访问到电子邮件)。此外,这只是将散列存储在数据库中的最小努力。这就是为什么我想知道这种普通令牌方法背后的想法是什么?


更新:没有人对此有任何意见吗?从我的角度来看,这是一个安全问题,但看起来我是唯一一个担心这个问题的人:D

4

1 回答 1

0

在数据库中散列它们没有任何意义。确认/重置电子邮件仍然需要向用户发送一个令牌,应用程序可以使用该令牌来根据您存储的散列密钥识别他们(邀请/密码重置令牌)。如果这是以明文或双向加密存储的,那么您将遇到完全相同的问题,因为黑客可以只使用明文令牌,而您的应用程序会很乐意对其进行哈希处理并对其进行身份验证。如果这被存储为单向加密,那么您的应用程序将无法提取它应该发送给用户的实际令牌。

必须有人知道密码/令牌的实际未散列版本。在密码中,实际的密码存储在用户的头脑中。在这种情况下,实际的令牌需要存储在数据库中。

于 2013-05-08T10:03:52.510 回答