我读了很多关于用令牌重置密码的文章。
我理解它,直到从链接中获取令牌,$_GET['token'];
但是我没有在那之后,我用token做什么?我只是检查是否存在于数据库中?因为我在这个链接上读到关于reset_password表中的交叉引用,但我不明白这意味着什么。寻找一些好的选项发送用户重置密码的电子邮件
我只是检查令牌是否存在并选择在同一行上的电子邮件吗?然后我允许用户使用该电子邮件重置密码?
使用令牌是出于安全考虑。
您通常使用仅对您可见的信息创建自己的令牌。
考虑一个场景,有人知道要重置某人的密码,他所要做的就是进入一个特定的链接,并将电子邮件添加到该&email={user_email}
这会使非常不安全。
但是如果你用只有你知道的信息散列一个令牌,你可以这样做:
&email={user_email}&token={token}
然后在你的代码中检索令牌,检查它是否符合你的特定规则,然后重置电子邮件密码。
让我给你一个例子,如何以一种只对你可见的方式散列它,并享受额外安全特性的好处。
假设你用电子邮件+今天的日期来散列它:
$token = md5($email+date('Y-m-d',time()))
这将使令牌仅在今天有效
可以询问重置密码用户的邮箱地址。然后,您可以验证电子邮件是否与令牌对应,从而发送重置密码的电子邮件。
为了避免安全风险,密码重置链接(在电子邮件中发送)只能在几个小时内可用(8),并且只有当用户点击它时才会重置密码,而不是之前。所以没有人可以重置你的密码,如果他没有你的令牌和你的电子邮件地址,如果他没有访问你的电子邮件帐户。