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