我在网站上有用户,他们的密码被加密(md5)并存储在数据库中。现在,我有他们的电子邮件,如果有人忘记了他的密码,我想给他发送链接以重置密码。
任何人都可以建议如何做到这一点?哪些是最佳实践?
问候,佐兰
我在网站上有用户,他们的密码被加密(md5)并存储在数据库中。现在,我有他们的电子邮件,如果有人忘记了他的密码,我想给他发送链接以重置密码。
任何人都可以建议如何做到这一点?哪些是最佳实践?
问候,佐兰
处理密码重置的安全方法如下所示:
密码重置请求:
重设密码:
您可以使用不带盐的 SHA512 之类的哈希算法对令牌进行哈希处理。如果令牌非常强(最小长度为 20,AZ 为 0-9),这是安全的。从理论上讲,您必须在将此类哈希输入数据库之前检查它是否已经存在,实际上这可以忽略不计。
您应该使用散列随机字符串发送电子邮件mail()
并将其添加到数据库中。电子邮件应包含类似“domain.com/forgot.php?h=HASHEDSTRING”的链接。在该页面中,您应该检查哪个用户拥有该散列字符串并输出一个字段供他们重置密码。
在数据库中弹出一个相当唯一的列,并且是一个随机生成的令牌字符串(很长)。当用户请求重置密码时,请通过电子邮件向他们发送该令牌以进行验证。通过链接(又名 GET)返回该令牌将确认用户有权访问电子邮件地址,并允许他们重置密码。
您可以执行以下操作,
如果用户忘记了他的密码,允许他输入注册的电子邮件。
发送带有重置密码链接的电子邮件,该链接应包含 md5(一些数据)例如:www.ex.com/md5_data
在发送邮件之前,输入的检查电子邮件已存在,如果存在,请获取用户 ID,存储用户 ID,您与邮件一起发送的 md5(数据)
当用户单击发送到邮件的链接时,获取 url 数据并检查表中是否存在 md5 数据,如果存在则获取用户 ID 并允许他使用用户 ID 设置新密码和更新密码,并从表中删除 md5 数据所以如果他再次单击该链接,它应该不起作用。