1

インクルードを実行する前にサニタイズして、サーバー上に存在することを確認することはできますか?

攻撃者が何らかのホワイトリストを使用してファイルパスを危険にさらすのを避けたいのですが、これは可能ですか?

私のインクルードは次のようになります。

require_once('../includes/front/header.php');
4

3 に答える 3

3

パスはどのように危険にさらされる可能性がありますか?(require_onceユーザー入力が含まれている場合を除きます-これは避けてください!)

次のコマンドを使用して、ファイルが存在するかどうかを確認できますfile_exists

例えば。

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

ホワイトリストが必要な場合はarray許可されたパス/ファイル名を作成して、in_arrayその有効性を確認するために使用できます。

于 2012-04-10T15:06:23.207 に答える
1

PHPのfile_exists関数とホワイトリストで可能になるはずです。

$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);
}

パスがPHPスクリプトにハードコードされていて、ファイル名のユーザー入力を受け入れない場合は、独自のファイル名/パスをサニタイズする必要はありません。

于 2012-04-10T15:03:29.157 に答える
0

「許可された」パスのリストに対して検証できる独自のインクルードを作成できます。

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

于 2012-04-10T15:05:20.597 に答える