web-dev-qa-db-ja.com

GET経由でIMG SRCを渡し、エコーしますか?それは本当に安全ですか?

本当に簡単なGETおよびエコーリクエストをより安全にする方法を知りたい

コード:

$src = $_GET['src']; 
echo "<img src='$src' />";

基本的に、example.com/link.php?src = imgname.jpgのようなURLがあります

理論的には、外部URLを挿入し、それらをサイトで解析しようとすることで悪用される可能性があると思います。 preg_matchを実行して画像のみを許可し、URLを削除することをお勧めしますか?

3
mashup

クロスサイトスクリプティング(XSS)の脆弱性を実装しました。このタイプのインジェクションの脆弱性は、攻撃者がユーザーの資格情報を盗んだり、ユーザーに自分のサイトまたは他のサイトに対して知らない間にアクションを実行させたりするために使用される可能性があります。 XSSの詳細については、ウィキペディアを参照してください。 http://en.wikipedia.org/wiki/Cross-site_scripting

あなたの脆弱性は、誰かがimgタグを閉じてからJavaScriptをページに挿入するsrcパラメーターを使用することで暴露される可能性があります。何かのようなもの:

'/><script>alert('hello world')</script>

はい、入力を検証する必要があります。次のようなpreg_matchを使用して正規表現と照合します。

^[a-zA-Z0-9\-\_]+\.(jpg|gif)$

また、phpのhtmlspecialchars関数を使用して、htmlに出力される文字列をエスケープする必要があります。

$src = htmlspecialchars($src, ENT_QUOTES);
echo "<img src='$src' />";
8