1

PHPassでこのエラーが発生します:

警告:is_readable():open_basedir制限が有効です。ファイル(/dev/urandom)が許可されたパス内にありません:(/customers/example.com/example.com/httpd.www:/customers/example.com/example.com/httpd.private:/customers /customers/example.com/example.com/httpdの/example.com/example.com/tmp:/customers/example.com/example.com:/var/www/diagnostics:/usr/share/php) www / example / scripts / PasswordHash.php(51行目)致命的なエラー:関数名は/customers/example.com/example.com/httpd.www/example/register.php(82行目)の文字列である必要があります

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行目(最初の2行は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

このopen_basedir制限はPHPのセキュリティ対策であり、基本的にファイルシステムへのアクセスを特定のディレクトリに制限します。これは、誰もが自分のファイルにのみアクセスできる共有環境で役立ちます。デフォルト設定では、すべてのファイルを開くことができます。

この場合、phpassは/dev/urandom許可されたディレクトリに含まれていないにアクセスしようとしているため、エラーが発生します。修正は、の設定を変更しopen_basedirphp.ini許可する/dev/urandom(またはすべてを許可する)ことです。

phpassのバージョン1.8は、エラーを抑制することでこの問題を解決します。

リビジョン1.7以降の変更:+2 -2行:

open_basedir制限が有効な場合の警告を抑制するために、接頭辞is_readable()に「@」を付けます。

于 2011-12-30T10:37:42.277 に答える