1

我用 PHPass 得到这个错误:

警告:is_readable():open_basedir 限制生效。文件(/dev/urandom)不在允许的路径内:(/customers/example.com/example.com/httpd.www:/customers/example.com/example.com/httpd.private:/customers /example.com/example.com/tmp:/customers/example.com/example.com:/var/www/diagnostics:/usr/share/php) 在 /customers/example.com/example.com/httpd。第 51 行的 www/example/scripts/PasswordHash.php 致命错误:函数名称必须是第 82 行 /customers/example.com/example.com/httpd.www/example/register.php 中的字符串

PasswordHash.php (PHPass) 上的第 51-54 行:

    if (is_readable('/dev/urandom') &&
        ($fh = @fopen('/dev/urandom', 'rb'))) {
        $output = fread($fh, $count);
        fclose($fh);

register.php 的第 81-84 行(还包括:前两行是 require 和 $hasher):

require('scripts/PasswordHash.php');
$hasher = new PasswordHash(8, false);
$hash = $hasher->HashPassword($pw);
if($strlen($hash) < 20){
    $notice[] = "Error";
}

那么,这个错误是什么意思呢?

4

1 回答 1

3

限制是 PHP 中的open_basedir一种安全措施,基本上是将文件系统的访问权限限制在特定目录中。这在每个人都应该只能访问自己的文件的共享环境中很有用。默认设置是允许打开所有文件。

在这种情况下, phpass 正在尝试访问/dev/urandom未包含在您允许的目录中的 ,从而导致错误。open_basedir解决方法是将 for中的设置更改为php.ini允许/dev/urandom(或允许一切)。

phpass 1.8 版通过抑制错误解决了这个问题:

自 1.7 版以来的更改:+2 -2 行:

当 open_basedir 限制生效时,以“@”为前缀的 is_readable() 禁止警告。

于 2011-12-30T10:37:42.277 回答