这是创建重置密码的链接的最佳做法? [关闭]

问题描述 投票:1回答:4

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

任何人都可以建议如何做到这一点? 哪些是最佳做法?

问候,卓然

php passwords forgot-password change-password
4个回答
2
投票

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


1
投票

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


1
投票

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

密码重置请求:

  1. 用户打开密码重置请求表单并输入电子邮件地址。
  2. 您的应用程序会检查数据库中是否存在电子邮件。 如果它存在,它会创建一个令牌,该令牌应该是随机的,而不是来自诸如userid或timestamp之类的信息。 令牌散列将与用户ID和有效期一起存储在数据库中的单独表中。 每封电子邮件都会向用户发送一封包含原始令牌的链接。
  3. 该应用程序显示已发送电子邮件的确认。 此页面可以包含电子邮件地址,因此用户可以检查他是否有拼写错误(毕竟没有关于电子邮件是否在数据库中的信息,因此攻击者无法测试其存在)。

重设密码:

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

您可以使用SHA512之类的哈希算法对令牌进行哈希处理,而不使用盐。 如果令牌非常强大(最小长度为20且0-9 az AZ),则这是安全的。 从理论上讲,在将数据输入数据库之前,必须检查这种哈希是否已经存在,实际上这可以忽略不计。


0
投票

你可以这样做,

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

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

  3. 在发送邮件之前,输入的支票邮件是存在的,如果存在则带有用户ID,存储用户ID,md5(数据)以及邮件和邮件一起发送

  4. 当用户点击发送到邮件的链接获取url数据并检查表中是否存在md5数据并且是否存在获取用户ID并允许他设置新密码并使用用户ID更新密码并从表中删除md5数据如果他再次点击链接它不应该工作。

© www.soinside.com 2019 - 2024. All rights reserved.