前回:やられアプリ BadTodo - 4.8 DOM Based XSS - demandosigno
Todoリストの編集画面において、URLの欄にjavascript:alert(document.cookie)
と記入して保存します。
その後に誰かがそのリンクをクリックするとXSSが発動します。
HTML上は入力値がそのまま href 属性に出力されています。
<tr> <td>URL</td><td><a href="javascript:alert(document.cookie)"> >>エッチな画像はこちら<<</a></td> </tr>
ウェブ健康診断 仕様 p.10 の確認手法4番目の例にあたります。
href や src などのURL属性値を外部から変更できる場合、URLとしてjavascript:JavaScript式
という形式(javascriptスキーム)でJavaScriptを起動できます。
(href属性値は URI を記述する場所なのでmailto:メールアドレス
やjavascript:JavaScript式
などの URI を指定することができる)
対策
javascriptスキームによるXSSはHTMLのエスケープ漏れが原因ではないので別の対策が必要になります。
URL を出力するときは、「http://」や 「https://」で始まる URL のみの許可を「ホワイトリスト方式」で実装してください。