忘记PHP MySQL的密码URL令牌

Shi*_*m84 0 php mysql passwords sha1 token

我是PHP的新手,到目前为止创建了一个登录,注册和忘记密码,目前用户从MySQL表中发送了他们的密码.我现在使用sha1加密了密码.我目前正在编写代码:

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

我目前发现很难在发送的电子邮件中向他们发送网址链接,以指示他们重置页面.

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

egg*_*yal 5

  1. 你甚至不应该存储(无盐)你用户密码的哈希值:你应该首先生成一个随机字符串("salt"),将它与它们的密码连接起来,散列结果(使用SHA1或你喜欢的任何算法)并存储数据库中的哈希值和salt.如果攻击者可以访问数据库中的哈希值,则会破坏预先计算的字典("彩虹表")攻击.

  2. 完成后,您不应该在数据库中存储用于密码重置的临时令牌:如果攻击者获得对用户表的访问权限,他们只需要完成您的"我忘记了我的密码"表单并从中读取令牌数据库,然后重置该用户的密码,而不会看到生成的电子邮件.因此,令牌被称为"密码等效",应该以与密码本身完全相同的方式受到保护:盐渍和散列.

  3. 存储了重置令牌的盐渍哈希后,您现在可以使用用户的ID向用户发送链接,并在URL的查询字符串中重置令牌,例如http://www.example.com/resetpassword.php?user=235747&token=347659864124567532256.

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