UTF-7によるXSSからの防御方法

hasegawayosuke2008-01-18

たぶん UTF-7 XSS Cheat Sheet を読んだ人の感想:


UTF7なXSS脆弱性はきちんとmetaタグ記述&IFRAME使用しなければ大丈夫と考えていいのかな?
http://twitter.com/nyaxt/statuses/596330132より
残念ながら違います。伝え方がヘタクソでごめんなさい。
UTF-7によるXSSを防ぐには、以下の対策をとれば大丈夫です。

  • 文字エンコーディング(charset)を明示する(できればHTTPレスポンスヘッダがよい)
  • HTTPレスポンスヘッダではなく、<meta> で指定する場合には、<meta> より前に攻撃者がコントロール可能な文字列をおかない
  • 指定する文字エンコーディング名は、ブラウザが確実に認識できる名称とする

この3点を守っている限り、UTF-7を利用したXSSは発生しません。
iframeを使用するのは、攻撃者の作成した罠ページです。ターゲットとなるページのcharsetが不明瞭な場合、罠ページ内でターゲットとなるページをiframe内に表示させることで、ターゲットとなるページの文字エンコーディングUTF-7とみなしてXSSを成立させることができます。