繁体   English   中英

忘记了PHP MySQL的密码URL令牌

[英]Forgot password URL token for PHP MySQL

我是PHP新手,到目前为止已经创建了一个登录名,注册名和一个忘记密码,当前从MySQL表向其发送密码。 我现在已经使用sha1加密了密码。 我目前正在编写代码,因此:

当用户单击“忘记密码”链接时,他们输入用户名和电子邮件地址(已验证)。

我目前发现很难在发送的电子邮件中向他们发送网址链接以将其定向到要重置的页面。

任何帮助将不胜感激(代码段,教程,方法链接等)。

  1. 您甚至不应该存储(未加盐)用户密码的哈希值:首先应生成一个随机字符串(“盐”),将其与用户密码连接起来,对结果进行哈希处理(使用SHA1或您喜欢的任何一种算法)并存储数据库中的哈希值和盐值。 如果攻击者曾经访问过数据库中的哈希,则可以击败预先计算的字典(“彩虹表”)攻击。

  2. 完成此操作后,您也不应在数据库中存储用于密码重置的临时令牌:如果攻击者获得对用户表的访问权限,他们只需要填写“我已经忘记了密码”表格并从服务器上读取令牌即可。数据库,然后重置该用户的密码,而不会看到生成的电子邮件。 因此,令牌被称为“等效密码”,并且应该以与密码本身完全相同的方式进行保护:加盐和散列。

  3. 存储了重置令牌的盐值哈希后,您现在可以将带有用户ID和重置令牌的链接发送到您的用户,该链接位于URL的查询字符串中,例如http://www.example.com/resetpassword.php?user=235747&token=347659864124567532256

  4. 通过该链接后,提供的用户和令牌将以$_GET['user']$_GET['token']形式提供给您的PHP脚本; 然后,您可以从数据库中检索盐,与提供的令牌连接,计算预期的哈希值,并将其与数据库记录中的哈希值进行比较。 如果它们匹配,则可以确信用户已收到您发送的电子邮件,然后可以提示他们输入所需的新密码。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM