2012-04-10 15 views
1

インクルードが実行される前にインクルードして、サーバ上に存在することを確認できますか?インクルードファイルをホワイトリストを使用して実行する前に除外

私は、攻撃者が何らかのホワイトリストを使用してファイルパスを侵害しないようにしたいのですが、これは可能ですか?

私などが、このようになります:あなたのパスは、PHPスクリプトにハードコードとユーザーを受け入れていない場合は

$allowed_files = array('../includes/front/header.php','../includes/front/footer.php'); 
$include_file = <string with file/path>; //EG '../includes/front/header.php' 

if (in_array($include_file,$allowed_files && file_exists($include_file)) { 
    require_once($include_file); 
} 

require_once('../includes/front/header.php'); 
+0

ファイルが必要であるため、ファイルが見つからないと実行が停止するということが、 'require'の全ポイントです。あなたが望んでいなければ 'file_exists()'や 'is_file()'と組み合わせて 'include'を使うだけです。 – jeroen

答えて

3

パスはどのように侵害される可能性がありますか? (!あなたのrequire_onceは、ユーザー入力が含まれていない限り - これを避ける)

ファイルがfile_existsを使用して存在する場合には、単にチェックすることができ:

など。

if(file_exists('../includes/front/header.php')) { 
    require_once('../includes/front/headers.php'); 
} 

あなたはちょうどarray許さパス/ファイル名で作成してから、ちょうどその有効性を確認するためにin_arrayを使用することができても、ホワイトリストが欲しいやった場合。

+0

okだから、ユーザー入力がないのでホワイトリストを作成する必要はないと言っていますか? – user1278496

+0

それはかなりそれほどです:) – billyonecan

+0

あなたはちょうどどのような状況でrequire_onceにユーザ入力が含まれているかを教えてください。 :s – user1278496

1

はPHPとホワイトリストのfile_exists機能を可能なはずですファイル名を入力すると、自分のファイル名/パスをサニタイズする必要はありません。

0

nstは「許可された」パスのリストです。

つまり、上記を使用しますが、関数でラップします。

関連する問題