密码重置令牌存储-应该对值进行哈希处理吗?

时间:2019-01-30 08:01:01

标签: php symfony

这可能是一个非常基本的问题。

我使用从bin2hex()生成的令牌为用户重置密码。该令牌按原样存储在数据库中,当用户使用它时,将针对数据库中的令牌搜索其令牌,如果它们相同,则可以重置密码。我在这里(PHP - How to implement password reset and token expiry)读到我应该在存储之前对密码进行哈希处理。这似乎是个好主意,但我想知道如何搜索哈希密码,还需要在发送给用户的基于令牌的url中包含用户名/电子邮件,以便可以再次搜索它们。然后检查哈希令牌?可以在重置链接中包含明显的标识符(我想是因为它已发送到他们的电子邮件地址)。

谢谢

Martyn

1 个答案:

答案 0 :(得分:0)

是的,您应该对密码重置令牌进行哈希处理,因为

  • 重置令牌到期,并非每个用户都有一个活动令牌
  • 用户会在更改密码时注意到,但在更改密码时不会注意到 密码被破解,因此可以采取措施来限制破坏 (更改密码和其他敏感数据等)。

此外,随着用户重用密码,攻击者可以为其他帐户(例如用户的电子邮件)尝试破解的密码,从而增加破坏。

重点:

如果令牌具有足够的熵,可以说20个随机字符0-9 a-z A-Z,那么您可以计算出未加盐的快速哈希(例如SHA-256或SHA-512)并将其存储。这是安全的,因为不可能成功地强行使用这种强大的“密码”。盐腌是完成的,因为人们选择的密码通常相对较弱,因为必须记住它们。

如果“密码重置令牌”允许某人使用其他明文信息来重置密码,则该密码实际上与密码和Should be treated as such相同。 使它们过期几分钟或几小时,并把它们当作秘密对待,因为它们确实如此。

我希望这会有所帮助