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

Php重置密码过程,不确定如何从令牌中检索,php,token,Php,Token,我读了很多关于用令牌重置密码的文章 我理解它,直到从链接获得令牌,$_GET['token'] 但是在那之后我就不跟了,我该怎么处理代币呢? 我是否只检查数据库中是否存在? 因为我在这个链接上读到了重置密码表中的交叉引用,但我不明白这意味着什么。 我是否只需检查令牌是否存在并选择同一行上的电子邮件? 然后我允许用户使用该电子邮件重置密码 使用令牌背后的想法是出于安全原因 您通常使用仅对您可见的信息创建自己的令牌 考虑这样一个场景,如果有人知道要重置某人的密码,他所要做的就是找到一个特定的链接并

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

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

但是在那之后我就不跟了,我该怎么处理代币呢? 我是否只检查数据库中是否存在? 因为我在这个链接上读到了重置密码表中的交叉引用,但我不明白这意味着什么。

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

使用令牌背后的想法是出于安全原因

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

考虑这样一个场景,如果有人知道要重置某人的密码,他所要做的就是找到一个特定的链接并将电子邮件添加到该
&email={user\u email}

这将使它变得极其不安全

但是,如果您使用只有您知道的信息散列令牌,您可以执行以下操作:

&email={user_email}&token={token}
然后在代码中检索令牌,检查它是否符合您的特定规则,然后才重置该电子邮件密码

让我举一个例子,说明如何以一种只对您可见的方式对其进行散列,并享受额外安全功能的好处

假设您使用电子邮件+今天的日期对其进行散列:

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

这将使令牌仅在今天有效。

您可以要求提供用户想要重置密码的帐户的电子邮件。然后,您可以验证电子邮件是否对应于令牌,并发送重置密码电子邮件


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

我想我有点理解,我理解链接上的标记,但是电子邮件地址不对?所以,如果我用$email和其他东西对它进行散列,那么我接下来要做的就是检查数据库中是否存在这种情况?如果是这样,我会将该令牌旁边的电子邮件地址拉出来,然后允许重置密码?您有两个选项。您可以散列令牌并将其作为另一个get变量与email变量一起发送,也可以尝试将该令牌放入电子邮件中(差不多bla@bla.com_1aisd2309asiod然后使用php
explode
函数将其在代码中分离。再次..只是一个例子。TBH是的,您也可以按照您的建议,从数据库中提取共同响应该哈希的电子邮件,但我不建议这样做。最好它同时发送电子邮件和令牌,并确保该令牌适合您创建的电子邮件散列,如果是,请重置pw并使用新密码将电子邮件发送给用户。出于某种原因,我不确定为什么当电子邮件位于链接中时它看起来不那么安全?这没关系,是吗?它是安全的,您不应该担心它。