这是创建用于重置密码的链接的最佳做法



我在网站上有用户,他们的密码是加密的(md5)并存储在数据库中。现在,我有他们的电子邮件,如果有人忘记了他的密码,我想向他发送链接以重置密码。

任何人都可以就如何做到这一点提供建议?哪些是最佳实践?

问候,佐兰

处理密码重置的安全方法可能如下所示:

密码重置请求:

  1. 用户打开密码重置请求表单并输入电子邮件地址。
  2. 应用程序检查数据库中是否存在电子邮件。如果存在,它会创建一个令牌,该令牌应该是随机的,而不是从用户 ID 或时间戳等信息派生的。令牌的哈希值将与用户 ID 和到期日期一起存储在数据库中的单独表中。带有原始令牌的链接将通过电子邮件发送给用户。
  3. 应用程序显示电子邮件已发送的确认。此页面可以包含电子邮件地址,因此用户可以检查他是否有拼写错误(毕竟没有信息电子邮件是否在数据库中,因此攻击者无法测试其存在)。

密码重置:

  1. 用户单击链接并打开重置窗体。在此表单上,他可以输入新密码两次。令牌必须作为隐藏的输入标记包含在表单中。
  2. 提交表单后,应用程序对令牌进行哈希处理,并在数据库中搜索此类令牌哈希。如果匹配且未过期,则可以允许用户更改密码。最后,令牌应标记为已使用,我自己更喜欢保留该条目,以便当用户再次单击链接时,我可以通知用户令牌已被使用。

您可以使用哈希算法(如 SHA512)对令牌进行哈希处理,而无需盐。如果令牌非常强(最小长度 20,0-9 a-z A-Z),这是安全的。从理论上讲,在将这样的哈希输入数据库之前,您必须检查它是否已经存在,在实践中,这可以忽略不计。

您应该使用 mail() 发送电子邮件,并将散列随机字符串添加到数据库中。电子邮件应包含"domain.com/forgot.php?h=HASHEDSTRING"之类的链接。在该页面中,您应该检查哪个用户具有该哈希字符串,并输出一个字段供他们重置密码。

在数据库中弹出一列,该列相当独特,并且是随机生成的标记字符串(相当长)。当用户请求重置密码时,请通过电子邮件向他们发送该令牌以进行验证。通过链接(又名 GET)返回该令牌将确认用户有权访问电子邮件地址,并允许他们重置密码。

你可以执行以下操作,

  1. 如果用户忘记了他的密码,允许他输入注册的电子邮件。

  2. 发送带有重置密码链接的电子邮件,该链接应包含md5(一些数据)例如:www.ex.com/md5_data

  3. 在发送邮件
  4. 之前,输入的支票电子邮件是存在的,如果存在,请获取用户ID,存储用户ID,md5(数据),您将与邮件一起发送

  5. 当用户单击发送到邮件的链接时,获取 url 数据并检查您的表中是否存在该 md5 数据,如果存在,则获取用户 ID 并允许他使用用户 ID 设置新密码和更新密码并从表中删除 md5 数据,因此如果他再次单击链接,它应该不起作用。

最新更新