使用md5哈希作为注册字符串令牌是安全的吗?

Keo*_*ges 3 php security cakephp email-confirmation

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

我以为我可以使用在表单上插入的电子邮件,加上随机的salt,并对这个连接的字符串进行散列,这样每个字符串令牌都是唯一的.链接将是这样的:

http://www.example.com/register/7ddf32e17a6ac5ce04a8ecbf782ca509
Run Code Online (Sandbox Code Playgroud)

我认为这很好,很容易构建,但我不确定它是否足够安全.

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

Bug*_*rUK 6

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

$email_token = openssl_random_pseudo_bytes(16);
$token = bin2hex($email_token);
Run Code Online (Sandbox Code Playgroud)

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

$email_token = bin2hex(random_bytes($length));
Run Code Online (Sandbox Code Playgroud)

对于PHP5,可以使用polyfill:https://github.com/paragonie/random_compat