MD5是生成帐户验证码的好方法

时间:2010-09-09 02:14:46

标签: php security registration

当用户注册帐户时,他们会收到一封包含验证码的电子邮件,他们可以点击该验证码来验证其帐户。

这是我生成验证码的方式。

md5(rand(0,1000)

使用下面的方法是一个糟糕的选择吗?它生成0-1000之间的随机数。由于只有1000个选项,并且他们的MD5哈希值已知,因此攻击者只需1000次审判即可验证帐户,而不会真正属于他们

3 个答案:

答案 0 :(得分:5)

这个帖子How to generate a verification code/number?对此事有一些好的想法。哈希,可逆哈希,校验位......根据您的需要提供多种选择。

答案 1 :(得分:2)

用攻击者无法知道的东西播种:

md5(rand(0,1000).'helloworld234');

你可以去的方式没有限制

md5(md5(time().'helloguys'.rand(0,9999)));

方式太多,但你明白了。

答案 2 :(得分:2)

rand(1,1000)是10位熵。 MD5它没有增加。平均而言,攻击者需要500次尝试来验证帐户。没有任何速率限制可以帮助您,因为熟练的攻击者将租用或已经拥有将用于验证帐户的僵尸网络。

安全播放并在验证链接中包含128位熵。在PHP openssl_random_pseudo_bytes(16, true)中是获取加密强随机字节的可移植方式,但如果您在某些Linux发行版或某个BSD OS下托管,则读/ dev / urandom也是可接受的选择。

还要质疑验证帐户的智慧,许多人正在使用无法追踪的一次性电子邮件(并且没有任何黑名单赢得最新版本)。