私はPHPのセキュリティ上の問題を初心者です。誰かが自分のコードでセキュリティの問題を報告しましたが、詳細を記述しませんでした。Ajaxセキュリティ質問:JQuery ajax()+ PHP scandir()=セキュリティ問題?
以下は、コードの要約版です。私はJQuery AJAX関数を使用してPHPのscandir()関数で使用されているサーバーにデータを送信しています。
セキュリティ上の問題はありますか?
HTMLドキュメント
<script
src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js">
</script>
<script>
$.ajax({
type: "POST",
url: "example.php",
cache: false,
data: {
foo: "images",
bar: "something else",
},
success: function(html){
alert(html);
}
});
</script>
PHPドキュメント
<?php
$foo = filter_var($_POST["foo"], FILTER_SANITIZE_STRING);
$bar = filter_var($_POST["bar"], FILTER_SANITIZE_STRING);
$foo = scandir($foo);
$bar = (explode(",",$bar));
foreach ($foo as $a) {
echo "<img src='$foo/$a'>";
}
?>
「foo」の値に「/」やURLへの絶対パスを含めたいと思います。このようにして、画像はどこからでも供給することができます。たとえば、私はfooを "http://www.somesite.com/directory/directory"と同等にすることができます。これを行うための安全な方法はありますか?そうでない場合は、JavaScriptオブジェクトの&php docからfooを削除し、目的のディレクトリをgetdir関数に直接コーディングする必要があります。私は実際には、私のプログラムを使用しているページごとに別々のPHPファイルを作成する必要があるので、これを避けたいと思います。 – edt
"この方法では、画像はどこからでも供給することができます" - あなたは本当に、リモートユーザにあなたのマシンのどこにいてもファイルを見る能力を与えたくありません。イメージファイルだけの場合でも。そして、ファイルが "jpg"のような画像拡張子を持っているからといって、それが画像データを含んでいるわけではありません。悪意のある攻撃者が他の脆弱性を介してコードを残している可能性があります。私は強くあなたのデザインと要件を再考することをお勧めします。 – Cheekysoft