解决PHP中不安全的随机数生成问题

时间:2012-04-18 19:01:22

标签: php security drupal

我们在各种Drupal模块上运行Fortify扫描,常见的关键/高结果是“不安全随机性”。它声明rand()函数无法承受加密攻击。

我的问题 - 这是一个严重的问题吗?如何在PHP中修复它?

谢谢。

2 个答案:

答案 0 :(得分:2)

这个问题的答案完全取决于你使用rand()调用的结果。

如果你将它们用于加密密钥之类的东西,那么工具的安全性取决于随机数的随机性,那么,是的,这是一个严重的问题。在这种情况下,您不应该调用rand()或mt_rand(),因为两者都不会产生足够随机的“随机”数字以供加密使用。你真的想利用你在Unix / Linux系统上的底层伪随机数发生器(PRNG) - / dev / urandom或Windows系统上的crypto-api上运行的平台 - 因为这些已被广泛研究并产生真正的随机数,适用于密码系统。 PHP不会轻易访问这些随机源,但是如何做这样的例子(例如 - > http://www.php.net/manual/en/function.mt-rand.php#83655)。

如果你正在使用randoms做其他事情,比如随机化首先向用户呈现哪个选项,或类似的东西,其中产生的数字没有以任何加密方式使用,那么你可能< / strong>能够使用rand()或mt_rand()逃脱。但是,如果您的应用程序/模块依赖于良好的随机数来确保其安全性,那么您确实需要利用操作系统源,如上所述。

答案 1 :(得分:1)