インクルードを実行する前にサニタイズして、サーバー上に存在することを確認することはできますか?
攻撃者が何らかのホワイトリストを使用してファイルパスを危険にさらすのを避けたいのですが、これは可能ですか?
私のインクルードは次のようになります。
require_once('../includes/front/header.php');
インクルードを実行する前にサニタイズして、サーバー上に存在することを確認することはできますか?
攻撃者が何らかのホワイトリストを使用してファイルパスを危険にさらすのを避けたいのですが、これは可能ですか?
私のインクルードは次のようになります。
require_once('../includes/front/header.php');
パスはどのように危険にさらされる可能性がありますか?(require_once
ユーザー入力が含まれている場合を除きます-これは避けてください!)
次のコマンドを使用して、ファイルが存在するかどうかを確認できますfile_exists
。
例えば。
if(file_exists('../includes/front/header.php')) {
require_once('../includes/front/headers.php');
}
ホワイトリストが必要な場合はarray
、許可されたパス/ファイル名を作成して、in_array
その有効性を確認するために使用できます。
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スクリプトにハードコードされていて、ファイル名のユーザー入力を受け入れない場合は、独自のファイル名/パスをサニタイズする必要はありません。
「許可された」パスのリストに対して検証できる独自のインクルードを作成できます。
つまり、上記を使用しますが、関数でラップします。