2011-12-15 11 views
0

ファイルパスが現在のディレクトリツリーにあるかどうかを確認します。ファイルが現在のディレクトリツリーに存在するかどうかを確認するには

パラメータをjs/script.jsとします。私の作業ディレクトリ(WD)は/home/user1/public_html/site

です。現在のWDの場合は、誰かがjs/script.jsを提供している場合は、WDに追加するだけで確認できます。このような通常の経路で動作します。しかし、もし誰か(攻撃者かもしれない)が../../../../etc/passwordを渡そうとするなら、それは問題になるでしょう。

RegExを使用して..文字を削除することで抑制することができます。そして、それは確かにそれを解決します。しかし、私はどのように何かを作成することができますか?chroot ed環境sotは、どのようなパス/ to/scriptが渡されてもWDの下で検索されるでしょうか?

編集: 私はhttp://php.net/chrootを認識しています。あなたのアプリはroot特権で動作する必要があります。 PHPから

+1

あなたのPHPスクリプトからopen_basedirの設定をすることが可能である5.3.0。 –

答えて

1

http://php.net/manual/en/function.realpath.php

$chroot = '/var/www/site/userdata/'; 
$basefolder = '/var/www/site/userdata/mine/'; 

$param = '../../../../etc/password'; 
$fullpath = realpath($basefolder . $param); 

if (strpos($fullpath, $chroot) !== 0) { 
    // GOTCHA 
} 
関連する問題