【发布时间】:2014-01-25 06:45:59
【问题描述】:
我正在开发一个 php/laravel-4 项目,我们需要对来自我们发送给他们的电子邮件中的链接的用户进行自动身份验证,我们需要对链接设置时间限制,这样电子邮件中的链接就不会进行身份验证过期时间过去后,我采用了这种方法,但我对它的安全性有些怀疑:
首先,我使用用户的电子邮件、时间戳和密钥创建一个 md5 哈希,如下所示:
$timestamp = time();
$hash = md5($email . $timestamp . $secret_key);
然后我可以生成这样的网址:
$url = "http://www.example.com/url?email={$email}&hash={$hash}×tamp={$timestamp}
然后我可以检查时间戳(用于时间验证)并重新生成哈希并使用提供的电子邮件对用户进行身份验证,您认为它有任何安全漏洞吗?如果是,请向我推荐安全的方法。
【问题讨论】:
-
如何防止有人在目标用户之前嗅探网络流量并使用此链接?可以安全地假设您的许多用户将通过未加密的方法检查电子邮件。
-
为什么要包含时间戳?哈希本身在理论上是唯一的,因此发送 ONLY 哈希,并将关联的用户 ID/时间戳存储在数据库表中。当用户单击链接时,您会在表中查找哈希,检查它在时间上是否仍然有效,然后获取该点的用户 ID。
-
@JohnChrysostom 那么您对通过电子邮件验证用户有什么建议?
-
@MarcB 发送时间戳和电子邮件的风险是什么?因为我想消除数据库开销。
-
我建议至少在他们点击链接后仍然需要他们的密码。要么通过电子邮件进行身份验证......
标签: php security authentication hash laravel