UTF-7によるXSSからの防御方法
たぶん UTF-7 XSS Cheat Sheet を読んだ人の感想:
残念ながら違います。伝え方がヘタクソでごめんなさい。
http://twitter.com/nyaxt/statuses/596330132より
UTF-7によるXSSを防ぐには、以下の対策をとれば大丈夫です。
- 文字エンコーディング(charset)を明示する(できればHTTPレスポンスヘッダがよい)
- HTTPレスポンスヘッダではなく、<meta> で指定する場合には、<meta> より前に攻撃者がコントロール可能な文字列をおかない
- 指定する文字エンコーディング名は、ブラウザが確実に認識できる名称とする
この3点を守っている限り、UTF-7を利用したXSSは発生しません。
iframeを使用するのは、攻撃者の作成した罠ページです。ターゲットとなるページのcharsetが不明瞭な場合、罠ページ内でターゲットとなるページをiframe内に表示させることで、ターゲットとなるページの文字エンコーディングをUTF-7とみなしてXSSを成立させることができます。