質問

私はPHPでスクリプトをリスト簡単なディレクトリを実装しています。

私は渡されたパスがディレクトリハンドルを開き、行き当たりばったりの結果をechoing前に、安全であることを確実にしたい。

$f = $_GET["f"];
if(! $f) {
    $f = "/";
}
// make sure $f is safe
$farr = explode("/",$f);
$unsafe = false;
foreach($farr as $farre) {
    // protect against directory traversal
    if(strpos($farre,"..") != false) {
        $unsafe = true;
        break;
    }
    if(end($farr) != $farre) {
        // make sure no dots are present (except after the last slash in the file path)
        if(strpos($farre,".") != false) {
            $unsafe = true;
            break;
        }
    }
}

ユーザーが送信パスが安全であることを確認するために、これは十分ですか、私は攻撃から保護するために行う必要がある他のものはありますか。

役に立ちましたか?

解決

これは realpath() のはあなたに役に立つこともあります。

  

realpath()は、すべてのシンボリックリンクを展開します   そして'/./'への参照を解決し、   中'/../'と、余分な文字'/'   入力経路、およびリターン   絶対パス名を正規化します。

ただし、この機能は、問題のパスが実際に存在していることを前提としています。これは、存在しないパスの列聖を実行しません。この場合、FALSEが返されます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top