Php重置密码过程中,不确定如何从令牌检索


Php reset password process, not sure how to retrive from token

我读了很多关于用令牌重置密码的文章。

我理解它,直到从链接中获取令牌,$_GET['token'];

但是我没有在那之后,我用token做什么?我只是检查是否存在于数据库中?因为我在这个链接上读到关于reset_password表中的交叉引用,但我不明白这意味着什么。寻找一些好的选项发送用户重置密码的电子邮件

我只是检查令牌是否存在并选择在同一行上的电子邮件吗?然后我允许用户使用该电子邮件重置密码?

使用令牌是出于安全考虑。

您通常使用仅对您可见的信息创建自己的令牌

考虑一个场景,有人知道要重置某人的密码,他所要做的就是进入一个特定的链接,并将电子邮件添加到该&email={user_email}

这会使非常不安全

但是如果你用只有你知道的信息散列一个令牌,你可以这样做:

&email={user_email}&token={token}

然后在你的代码中检索令牌,检查它是否符合你的特定规则,然后重置电子邮件密码。

让我给你一个例子,如何以一种只对你可见的方式散列它,并享受额外安全特性的好处。

假设你用电子邮件+今天的日期来散列它:

$token = md5($email+date('Y-m-d',time()))

这将使令牌仅在今天有效

可以询问重置密码用户的邮箱地址。然后,您可以验证电子邮件是否与令牌对应,从而发送重置密码的电子邮件。

为了避免安全风险,密码重置链接(在电子邮件中发送)只能在几个小时内可用(8),并且只有当用户点击它时才会重置密码,而不是之前。所以没有人可以重置你的密码,如果他没有你的令牌和你的电子邮件地址,如果他没有访问你的电子邮件帐户。