やられアプリ BadTodo - 4.10 XSS URL属性値に対して

前回:やられアプリ 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 のみの許可を「ホワイトリスト方式」で実装してください。

次回:やられアプリ BadTodo - 5 オープンリダイレクト - demandosigno

/* -----codeの行番号----- */