3

ユーザーがサービス上のファイルを要求している場合、通常、PHPのrealpath()を使用し、ルートディレクトリの下にあることを確認することで、ユーザーが必要な範囲外のドキュメントにアクセスするのを防ぐことができます。このような:

$path = realpath($_GET['path']);
// Protect against LFI vulnerabilities
if (substr($path, 0, strlen($root)) == $root)
{
    // safe
}

ただし、realpath()は、すでに存在するファイルに対してのみ機能します。ユーザーがスクリプトを書き込もうとしている場所がルートの下にあることを確認したい場合はどうすればよいですか?

realpath()を使用できません。「..」参照をチェックして削除する必要がありますか?それとももっと良い方法はありますか?

4

1 に答える 1

0

realpath(dirname($ file))がルートディレクトリの下にあるかどうかを確認するのはどうですか?

$dir = $path;
$found = false;

while ($dir) {
    $dir = dirname($dir);
    if (!is_dir($dir)) {
        continue;
    }

    if (strpos(realpath($dir), $root) === 0) {
        $found = true;
    }

    break;
}

var_dump($found);
于 2012-08-05T06:03:14.127 に答える