次のことを行うための安全な方法を見つけようとしています。
- ユーザーは値を html フォームに入力します。
- フォームが送信されます。
- PHP は、送信された値を「scandir」関数の引数として使用します。
私の理論は、絶対パスを禁止し、ディレクトリ名に特定の値を含める必要があるphpスクリプトにロジックを含めることです。
私の懸念は、ハッカーが私のフォームを使用して自分の値を送信し、機密ファイルにアクセスできることです。
これは JQuery プラグイン用です。ユーザーが PHP ファイルを変更する必要はありません。
以下のコードはどのようにハッキングされる可能性がありますか?
<?php
$foo = $_POST["some_directory"];
//validate $foo
//make sure path to directory is relative
$foo_url_test = parse_url($foo);
if (isset($foo_url_test['scheme']) || isset($foo_url_test['host'])) {
$foo = NULL;
}
//make sure the directory name contains 'bar123'
$foo_name_test = preg_split('_[\\\\/]_', $foo);
$foo_name_test = end($foo_name_test);
$foo_name_test = strpos($foo_name_test,'bar123');
if ($foo_name_test === false) {
$foo = NULL;
}
//make sure the path does not contain '..'
$foo_dot_dot_test = strpos($foo,'..');
if ($foo_dot_dot_test == TRUE || $foo_dot_dot_test === 0) {
$foo = NULL;
}
//get files
$files_array = scandir($foo);
?>