php – 我可以访问/ dev / urandom与open_basedir有效吗?

发布时间:2022-04-30 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了php – 我可以访问/ dev / urandom与open_basedir有效吗?脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
我想在CodeignITer中使用PHPass-0.3,但是由于open_basedir,我收到以下错误

以下代码

function get_random_bytes($count)
{
    $output = '';
    if (is_readable('/dev/urandom') &&    //Line Number: 51
        ($fh = @foPEn('/dev/urandom','rb'))) {
        $output = fread($fh,$count);
        fclose($fh);
    }

    if (strlen($output) < $count) {
        $output = '';
        for ($i = 0; $i < $count; $i += 16) {
            $this->random_state =
                md5(microtime() . $this->random_state);
            $output .=
                pack('H*',md5($this->random_state));
        }
        $output = substr($output,$count);
    }

    return $output;
}

有什么可以做的来解决这个问题吗?

你有一些选择:

1 – 从一个真正的RNG下载一个转储(this one提供基于放射性衰变的转储),并使用它,只要确保你不读取相同的nn个字节.种种笨重,但是一个选择.

2 – PHP代码(UGLY)执行从/ dev / urandom读取的内容

3 – 回到mt_rand()(也丑,但我已经看到这样做):

for ($i = 0; $i < $count / 8; $i++) {
   $output .= dechex(mt_rand(0,0x7fffffff));
 }

所有的选择都是笨重和丑陋的,不幸的是.最好的做法是确保你不必处理open_basedir.不过,这个特别的烦恼可以解决.

最后 – 不可能与你的主机一起飞行,但也许值得一试:

您可以要求您的主机在您的主目录中提供urandom,以便您可以阅读它.告诉他们您需要访问urandom来生成随机数字,以便为用户提供更好的安全性,然后请他们运行:

mknod urandom c 1 9

在你的主目录我只是在自己的服务器上尝试,它的工作原理(但root需要为您做).没有实际的理由阻止你使用系统的伪随机生成器,除了PHP之外你可以使用它.这实际上是他们允许您访问urandom的最简单的方式,因为它不需要PHP或vhost配置中的异常.

不允许访问/ dev / random是一个合理的事情,因为/ dev / random必须通过可用的(新的)系统熵补充,并且可能导致重要的事情阻止读取,如果耗尽,这可能在低流量服务器上经常发生.然而,/ dev / urandom保证永远不会阻止,因为它只是重新使用内部熵池一次耗尽,这就是为什么它是较低质量的来.

注意

我不是说open_basedir的想法是坏的,但它也打破了良好的代码.经典的chroot更好,但更难,这就是为什么你遇到open_basedir比你做一个真正的chroot更多.至少,任何程序都应该能够访问服务器上的零,零和urandom设备.

脚本宝典总结

以上是脚本宝典为你收集整理的php – 我可以访问/ dev / urandom与open_basedir有效吗?全部内容,希望文章能够帮你解决php – 我可以访问/ dev / urandom与open_basedir有效吗?所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。