0

PHPでローカルファイルのインクルージョンを正しく除外するにはどうすればよいですか? 私は検索してきましたが、これを行うための簡単な機能が見つかりません。私が理解しているように、スラッシュを削除するだけでは十分ではありません。

4

2 に答える 2

4

ユーザー入力include()で (またはその親戚、require()またはなど) を使用しないでください。readfile()これまで。

于 2012-04-23T18:31:45.733 に答える
1

これを回避する最も簡単な方法は、ユーザー入力からのコードを記述しないことinclude()です。通常、これを行う必要はありません。foo.php?page=barURLを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 に答える