忘记了PHP MySQL的密码URL令牌
我是PHP新手,到目前为止,我创建了一个登录、注册和忘记密码,用户当前从MySQL表发送密码。我现在已经使用sha1加密了密码。我目前正在编写代码,以便: 当用户单击忘记密码链接时,他们输入用户名和电子邮件地址(已验证) 目前,我发现很难在发送的电子邮件中向他们发送url链接,将他们引导到要重置的页面 任何帮助(代码片段、教程、方法链接等)都将不胜感激 助教忘记了PHP MySQL的密码URL令牌,php,mysql,passwords,token,sha1,Php,Mysql,Passwords,Token,Sha1,我是PHP新手,到目前为止,我创建了一个登录、注册和忘记密码,用户当前从MySQL表发送密码。我现在已经使用sha1加密了密码。我目前正在编写代码,以便: 当用户单击忘记密码链接时,他们输入用户名和电子邮件地址(已验证) 目前,我发现很难在发送的电子邮件中向他们发送url链接,将他们引导到要重置的页面 任何帮助(代码片段、教程、方法链接等)都将不胜感激 助教 您甚至不应该存储用户密码的散列(未加盐):您应该首先生成一个随机字符串(“salt”),将其与密码连接起来,对结果进行散列(使用SHA1或
http://www.example.com/resetpassword.php?user=235747&token=347659864124567532256
$\u GET['user']
和$\u GET['token']
对您的PHP脚本可用;然后,您可以从数据库中检索salt,与提供的令牌连接,计算期望的散列并与数据库记录中的散列进行比较。如果它们匹配,则您确信用户已收到您发送的电子邮件,然后您可以提示他们输入所需的新密码http://www.example.com/resetpassword.php?user=235747&token=347659864124567532256
$\u GET['user']
和$\u GET['token']
对您的PHP脚本可用;然后,您可以从数据库中检索salt,与提供的令牌连接,计算期望的散列并与数据库记录中的散列进行比较。如果它们匹配,则您确信用户已收到您发送的电子邮件,然后您可以提示他们输入所需的新密码你能把你用的代码贴出来吗?对于这样一个开放式的问题,很难帮助你。如果你说你已经“用sha1加密了密码”,我相信你的意思是你已经对密码进行了哈希运算。为了有效地提供帮助,如果您可以发布当前无法正常工作的代码,那就太好了。正如PHP手册中关于
mysql\u*
函数的章节所述:不建议在编写新代码时使用此扩展。相反,应该使用或扩展名。在选择MySQL API时,请参阅以获取更多帮助。您可以发布用于此目的的代码吗?对于这样一个开放式的问题,很难帮助你。如果你说你已经“用sha1加密了密码”,我相信你的意思是你已经对密码进行了哈希运算。为了有效地提供帮助,如果您可以发布当前无法正常工作的代码,那就太好了。正如PHP手册中关于mysql\u*
函数的章节所述:不建议在编写新代码时使用此扩展。相反,应该使用或扩展名。在选择MySQL API时,请参阅以获取更多帮助。感谢这些信息,我假设可以通过为eg$salt=sha1(md5($password));;定义变量来实现这一点;。在研究时,我听说了彩虹表,但没有听说“salt”的方法,所以谢谢。@baile1990:不,salt应该是随机的:有关如何确保密码安全的详细课程,请参阅+1。尽管我需要问一下……假设攻击者获得了对用户表的访问权……他不也会通过这种方式获得对salt的访问权吗?当然,假设他“知道”页面使用的算法,那么他就不能通过这种方式访问用户表了吗?@ATaylor:通过对用户表的读取访问,攻击者确实会发现salt——但这只能让她对每个密码执行离线暴力攻击(在存在足够安全的哈希算法的情况下,即使攻击者具有显著的