4

我开始在我的项目上开发用户注册。用户将通过电子邮件发送的链接确认他们的注册。

我想我可以使用表单中插入的电子邮件,加上一个随机盐,并对这个连接的字符串进行哈希处理,这样每个字符串标记都是唯一的。该链接将是这样的:

http://www.example.com/register/7ddf32e17a6ac5ce04a8ecbf782ca509

我认为它很好且易于构建,但我不确定它是否足够安全。

我正在使用 CakePHP 2.7 和 SQL Server 2014 开发这个项目。

4

3 回答 3

8

这实际上取决于您如何生成 MD5。只要确保您的数据是随机的。我不使用 MD5 来生成这些类型的哈希,而是会执行以下操作:

$email_token = openssl_random_pseudo_bytes(16);
$token = bin2hex($email_token);

就个人而言,如果使用 PHP7 ,我会选择使用random_bytes这样的东西。

$email_token = bin2hex(random_bytes($length));

对于 PHP5,有一个 polyfill 可用:https ://github.com/paragonie/random_compat

于 2016-02-21T15:29:09.523 回答
2

您应该考虑潜在的攻击者如果能够生成不属于他的令牌会做什么,然后确定 MD5 哈希是否足够好。

如果我理解正确,您只想验证用户的电子邮件,并且只有在用户真正拥有该电子邮件地址时才创建一个帐户。如果攻击者使用伪造的电子邮件创建了 1000 个帐户,对您或地址的所有者是否会不利?

与往常一样,安全取决于情况,IMO。

如果您想安全起见,请不要让您的令牌依赖于用户数据。生成一个完全随机的令牌并将其保存在数据库中待定注册的旁边。

于 2016-02-21T15:31:17.933 回答
1

为您在注册时生成的用户使用一个完全随机的值,通过“sha1”或“sha2”运行它,将其存储在数据库中,然后在电子邮件中使用它。然后您只需检查该值是否在数据库中。如果您想另外将哈希与另一个数据点(例如他们的电子邮件)相关联,那就更好了。

于 2016-02-21T15:59:54.500 回答