我们应该散列密码重置令牌并将它们存储在数据库中吗?

Should we hash the password reset tokens and store them in database?

我正在为我的 ASP.NET 应用程序执行密码重置机制。

我想知道,如果有人可以访问我的数据库,他们可以轻松读取密码重置令牌并更改用户的密码,我不应该散列 'password reset tokens' 然后存储它们在我的数据库中?

注意:我说的是 "Password Reset Tokens",而不是实际的 "Passwords"

是的,我建议您对重置的令牌进行哈希处理,然后将它们存储在数据库中。

同样在使用之后,删除记录也是一个很好的做法。 您可以使用 AesCryptoServiceProvider 或其他一些加密提供程序来完成这项工作。有许多关于如何使用它们的代码示例。

如果 "password reset token" 允许某人使用其他明文信息重设密码,那么它实际上与密码和 should be treated as such 相同。

让它们在几分钟或几小时后过期,并将它们视为秘密,因为它们确实如此。

我建议这样做,并认为这样做是一种很好的做法。

您应该已经拥有适当的基础设施来相当容易地做到这一点,因为您应该已经使用密码来做到这一点。

好处:

  • 实施成本低(现有基础设施应该已经在 地点)
  • 更安全(安全问题的空间更小)
  • 安心