Webエンジニアの雄大です。
今回もクロスサイトスクリプティングのお話。
前回
ユーザ入力値をHTMLタグの属性値として画面に出力するときの対処方法は2つあるとされています。
・必ず入力値をダブルクォーテーション「””」で囲う。
・ダブルクォーテーションをHTMLエンコードをする。
と書きましたが、ダブルクォーテーションで囲っても、クロスサイトスクリプティングが可能なお話
引用符ありでもXSSが起きる例
quote.php
<?php session_start(); if(!isset($_GET['p'])){ $_GET['p'] = ""; } ?> <html> <head> <title>引用符あり</title> </head> <body> <form action="notquote.php" method="GET"> <input type=inputname="p" value="<?php echo $_GET['p']; ?>""> <input type="submit" value="submit"> </form> </body> </html>
これに
quote.php?p=”+onmouseover%3d”alert(document.cookie)
このようなパラメータを渡してあげます。
そうすると、
<input type=input name=”p” value=”” onmouseover=”alert(document.cookie)”>
このように出力され、アラートが出てしまいます。
しっかりと、<>”‘&の記号はエスケープすることと併用しなくてはいけません。
コメント