2014-06-24 21 views
0

我一直在阅读很多关于使用令牌重置密码的页面。Php重置密码过程,不知道如何从令牌回收

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

但是我没有跟在那之后,我该如何处理令牌? 我只是检查数据库中是否存在? 因为我读了关于在reset_password表中交叉引用的链接,但我不明白这是什么意思。 Looking for a some good options to send users reset password emails

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

+1

简答:是的。 – colburton

回答

1

使用背后的想法是一个令牌是安全原因。

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

考虑这样一个场景,有人理解,重新设定一个密码,他所要做的就是得到一个特定的链接,并添加电子邮件到&email={user_email}

这将使为极不安全

但是,如果你哈希带有信息的令牌只有你知道的,你可以这样做:

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

,然后检索令牌代码,检查它是否符合你的具体规则或什么不是,然后才能重置该电子邮件密码。

让我给你举例说明如何以一种只有你可见的方式对它进行散列,并享受额外安全功能的好处。

比方说,你哈希使用电子邮件+今天的日期是:

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

这将使令牌仅适用于今天。

+0

我想我有点理解,我明白生成的链接上附加的令牌,但电子邮件地址不正确?所以,如果我用$ email和其他东西来散列它,接下来我要做的是检查数据库中是否存在?如果确实如此,我会将该电子邮件地址放在该令牌旁边,然后我允许重置密码? – Benyaman

+0

你有两种选择。 您可以散列令牌,并将其作为不同的获取变量发送,与电子邮件变量一起发送,也可以尝试使用令牌(类似于[email protected]_1aisd2309asiod),然后将其与代码分离php'explode'函数。再次..只是一个例子。 –

+0

TBH是的,你也可以做你的建议,从数据库中的电子邮件响应该哈希,但我不会建议这样做。 它发送电子邮件和令牌的效果最好,并确保该令牌适合您创建的电子邮件散列,如果是,请重置pw并将带有新密码的电子邮件发送给用户。 –

1

您可以询问用户想要重置密码的帐户的电子邮件。然后您可以验证电子邮件是否与令牌相对应,因此请发送重置密码电子邮件。

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

相关问题