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