0

私は、ユーザーが特定のディレクトリを参照できるようにするスクリプトに取り組んでいます。このディレクトリは、このファイルが置かれているディレクトリではなく、変数に設定されています。

 define('FOLDER', '../_files/');

これで、レンドレッドされたhtmlにより、そのフォルダー内のサブフォルダーをナビゲートできるようになります。「dir」GET変数を使用して、表示するサブフォルダーのコンテンツと、同じdir変数を使用して上に移動できる「..」リンクをスクリプトに指示します。

$ _GET ['dir']がFOLDERと等しい場合、その「..」リンクが表示されないようにするチェックを設定しました。しかし、URLにあるその変数をいじるのは簡単で、どこでそれを行っても、私のスクリプトでは許可されたフォルダーの上を参照できます。必ずしも安全な状況ではありません...

したがって、許可されたディレクトリの完全なローカルパスを要求されたディレクトリと照合し、後者が許可されたディレクトリ内にない場合は、「..」を表示しないようにする必要があると考えています。

しかし、私はそれを行う方法がわかりません。ヒントやポインタをいただければ幸いです。ありがとう

4

2 に答える 2

1

realpath()を見たいと思うかもしれません。

$foo = realpath($foo);
if (substr($foo, 0, 8) != '/my/path') {
    return false;
}

...またはそのようなもの。

この質問の方が良いと思うので、この回答からコピーしました。

于 2009-08-26T08:45:52.493 に答える
0

または、正規表現を使用できます

$requested = realpath($foo);
$allowedpath = '/path/to/allowed';

$regex = '/^'.addslashes($allowedpath).'\/?.*$/';

if (!preg_match($regex, $requested)) {
    return false;
}
于 2009-08-26T08:58:27.383 に答える