PHPでローカルファイルのインクルージョンを正しく除外するにはどうすればよいですか? 私は検索してきましたが、これを行うための簡単な機能が見つかりません。私が理解しているように、スラッシュを削除するだけでは十分ではありません。
1569 次
2 に答える
4
ユーザー入力include()
で (またはその親戚、require()
またはなど) を使用しないでください。readfile()
これまで。
于 2012-04-23T18:31:45.733 に答える
1
これを回避する最も簡単な方法は、ユーザー入力からのコードを記述しないことinclude()
です。通常、これを行う必要はありません。foo.php?page=bar
URLをURLとして使用する代わりにbar.php
。
どうしても必要な場合は、いくつかの方法でフィルタリングを行うことができます。ホワイトリストは簡単です。
$ok = array('foo.php', 'bar.php', 'baz.php');
$include = in_array($_GET['page'], $ok) ? $_GET['page'] : 'default.php';
include($include);
これにより、含まれるファイルのプリセットリストのみが許可されます。
または、正規表現でフィルタリングすることもできます(ただし、これは間違いを起こしやすいです)。
if (preg_match('!^[a-z]+\.php$!', $_GET['page'])){
include($_GET['page']);
}else{
include('default.php');
}
于 2012-04-23T18:41:12.360 に答える