我们应该散列密码重置令牌并将它们存储在数据库中吗?
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 相同。
让它们在几分钟或几小时后过期,并将它们视为秘密,因为它们确实如此。
我建议这样做,并认为这样做是一种很好的做法。
您应该已经拥有适当的基础设施来相当容易地做到这一点,因为您应该已经使用密码来做到这一点。
好处:
- 实施成本低(现有基础设施应该已经在
地点)
- 更安全(安全问题的空间更小)
- 安心
我正在为我的 ASP.NET 应用程序执行密码重置机制。
我想知道,如果有人可以访问我的数据库,他们可以轻松读取密码重置令牌并更改用户的密码,我不应该散列 'password reset tokens' 然后存储它们在我的数据库中?
注意:我说的是 "Password Reset Tokens",而不是实际的 "Passwords"
是的,我建议您对重置的令牌进行哈希处理,然后将它们存储在数据库中。
同样在使用之后,删除记录也是一个很好的做法。 您可以使用 AesCryptoServiceProvider 或其他一些加密提供程序来完成这项工作。有许多关于如何使用它们的代码示例。
如果 "password reset token" 允许某人使用其他明文信息重设密码,那么它实际上与密码和 should be treated as such 相同。
让它们在几分钟或几小时后过期,并将它们视为秘密,因为它们确实如此。
我建议这样做,并认为这样做是一种很好的做法。
您应该已经拥有适当的基础设施来相当容易地做到这一点,因为您应该已经使用密码来做到这一点。
好处:
- 实施成本低(现有基础设施应该已经在 地点)
- 更安全(安全问题的空间更小)
- 安心