我刚刚使用盐渍 sha1 完成了对数据库中的密码的加密。当然,我需要实现一个忘记密码的链接(电子邮件也是如此)。我现在制作了那些不好的转变版本。
我假设由于加密方式,我需要提示用户重置密码。
我只是在寻找最安全的方法来做到这一点。任何建议,或资源和教程的链接,以及我应该使用什么样的方法将不胜感激。
谢谢,美好的一天。
我刚刚使用盐渍 sha1 完成了对数据库中的密码的加密。当然,我需要实现一个忘记密码的链接(电子邮件也是如此)。我现在制作了那些不好的转变版本。
我假设由于加密方式,我需要提示用户重置密码。
我只是在寻找最安全的方法来做到这一点。任何建议,或资源和教程的链接,以及我应该使用什么样的方法将不胜感激。
谢谢,美好的一天。
需要明确的是sha1
,咸味或奶酪洋葱味不是加密,而是称为散列。这是一种单向功能,具有独特的独特输出。在数据库中对密码使用加盐哈希的想法是双重的:
ninefingers:stackoverflow!!:{insertcommonwordhere}
。它不会阻止他们生成它,只会让它更不方便。现在我们已经解决了这个问题,是的,如果用户忘记了他们的密码,您就无法通过电子邮件将其发送给他们,因为您无法反转哈希值。按设计。
相反,您要做的是允许用户安全地重置他们的密码。最简单的形式是,如果用户输入他们的电子邮件地址,您通过电子邮件向他们发送指向您网站的链接,在其参数中包括一个唯一的、一次性使用的令牌,该令牌在短时间内有效。
其他选择?为他们生成一个密码并通过电子邮件发送给他们。英国的英国政府网关做了一件很有趣的事情:网页包含一半的密码,另一半是电子邮件。您需要同时再次登录。
现在,百万美元的问题:它安全吗?不,没有什么是安全的。没有 100% 的安全性。曾经。这种存储密码的特殊方法增加了安全性,因为:
select * from table users;
也无法轻松读取这些密码的恶意请求。但是,一旦您依赖能够向用户发送电子邮件作为一种安全通信方法,您就依赖于:
那么问题就变成了——你真的需要有多安全?实施 email-out-a-reset-link 解决方案将适用于大多数情况,因为它们不是足够高价值的目标,真的。