今時のブラウザがどれくらいUTF-7をまだサポートしているか調べてみたのでメモ。全てWin32上。
- IE8
- レスポンスヘッダでcharset=utf-7と指定したとき、およびコンテンツの先頭(<html>より前)にUTF-7のBOMである +/v8- を挿入しておいた場合にUTF-7となる。<meta>でcharset=utf-7と指定した場合はページを表示したときにはUTF-7とはならないが、リロードするとUTF-7となる。
- IE9beta
- レスポンスヘッダでcharset=utf-7と指定したとき、およびコンテンツの先頭(<html>より前)にUTF-7のBOMである +/v8- を挿入しておいたとき、<meta>でcharset=utf-7と指定したときにそれぞれUTF-7となる。
- Firefox 3.6.13
- <meta> で charset=utf-7 と指定しておくと、ページを表示したときにはUTF-7とはならないが、リロードするとUTF-7となる。
- Firefox 4.0b11
- <meta> レスポンスヘッダ、BOMいずれの方法でもUTF-7とは判断されない。
- Opera,Chrome,Safari
- 上記の方法ではUTF-7扱いされることはない。
UTF-7によるXSSを考えたときに、BOMの挿入はコンテンツの先頭に挿入しなければいけないので該当するものは少ないと思うが、JSONPでcallback名のチェックが甘く content-type が不適切なものはXSS可能。