必ず入力値を””でくくっても、クロスサイトスクリプティングが可能なサンプルプログラム

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)”>
このように出力され、アラートが出てしまいます。

しっかりと、<>”‘&の記号はエスケープすることと併用しなくてはいけません。

コメント

タイトルとURLをコピーしました