Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/265.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 创建重置密码链接的最佳做法是什么?_Php_Passwords_Forgot Password_Change Password - Fatal编程技术网

Php 创建重置密码链接的最佳做法是什么?

Php 创建重置密码链接的最佳做法是什么?,php,passwords,forgot-password,change-password,Php,Passwords,Forgot Password,Change Password,我在网站上有用户,他们的密码被加密(md5)并存储在数据库中。现在,我有他们的电子邮件,如果有人忘记了他的密码,我想给他发送一个链接来重置密码 任何人都可以就如何做到这一点提出建议?哪些是最佳实践 在这方面,Zoran在数据库中弹出一列,该列相当独特,是随机生成的令牌字符串(相当长)。当用户请求重置密码时,通过电子邮件向他们发送该令牌以进行验证。通过链接(aka GET)返回该令牌将确认用户有权访问电子邮件地址,并允许他们重置密码。在数据库中弹出一列,该列相当独特,是随机生成的令牌字符串(相当长

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

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


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

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

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

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

您可以执行以下操作:

  • 如果用户忘记了密码,请允许他输入已注册的电子邮件

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

  • 在发送邮件之前,请检查输入的电子邮件是否存在,如果存在,请获取用户id,存储用户id,以及随邮件一起发送的md5(数据)

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

  • 你可以这样做

  • 如果用户忘记了密码,请允许他输入已注册的电子邮件

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

  • 在发送邮件之前,请检查输入的电子邮件是否存在,如果存在,请获取用户id,存储用户id,以及随邮件一起发送的md5(数据)

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


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

    密码重置请求:

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

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

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

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

    密码重置请求:

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

  • 用户单击链接并打开重置表单。在此表单上,他可以输入两次新密码。令牌必须作为隐藏的输入标记包含在表单中
  • 提交表单后,应用程序散列令牌并在数据库中搜索这样的令牌散列。如果匹配且未过期,则用户可以