我正在寻找设置一个php密码恢复脚本,使用24小时后过期的令牌。但我不知道该怎么做。我目前有SHA1
个加密的用户密码。我想要做的就是在URL上添加一个令牌,当他们请求重置密码时,该URL会发送给用户。但是我该如何正确地做到这一点以及我需要在数据库中存储什么?
答案 0 :(得分:35)
$_GET['token']
)答案 1 :(得分:9)
我根本不会使用数据库。但是一种方式加密。
只需在邮件中提供的超链接中发送必要信息,由哈希签名。
像这样的东西
$token = sha1($user_id.$time.$user_pass.$salt).dechex(time()).dechex($user_id);
$link = "http://".$domain."/restorepass/?token=$token";
通过接收它只需拆分并解码,然后检查散列和超时。
答案 2 :(得分:3)
您需要存储唯一令牌和令牌到期时间戳。当用户访问唯一URL时,您必须验证令牌,用户名和令牌到期时间戳。如果一切正常,您可以发送新密码或显示用户可以设置新密码的表单。
答案 3 :(得分:0)
我会通过设置另一个名为pessword_reset_sessions的数据库来解决这个问题。
这样您就可以存储以下内容:
用户标识 generalhash userhash timeinititated 尝试
然后使用用户ID,您将获得用户ID obv,一般哈希是一个未向用户显示但用于创建用户哈希的哈希。
timeinitiated应该是他第一次请求新密码时的UNIX时间戳。
一旦您确认请求密码的用户已输入验证信息,如电子邮件,姓名,密码问题。在密码重置表中创建一行。
并发出包含userhash的电子邮件。
当散列通过$_GET['hash']
返回时,您从generalhash
创建另一个散列,以与通过$ _GET []传递的散列进行比较,如果散列不匹配,则增量attempts
你也可以先检查一下,确保他没有多次尝试安全性。