Windows-31JがUTF-7によるXSSの要因になることはよく知られるようになって来ましたが、依然としてMS932やWindows-31Jが使われるWebアプリケーションは生産され続けています。 その原因の1つはJ2EEのサーブレット及びJSPのAPIの仕様の欠陥にあるのではないかと最近思うようになってきました。 javax.servlet.ServletResponse や JSP の仕様では、 文字列→バイト列への変換に使用する変換テーブル名 HTTPのContent-typeヘッダに埋め込んでブラウザに送信されるエンコーディング名 の2つに同じエンコーディング名を使う事になっているので、 Shift_JIS で特定の文字が文字化けしてしまうのを防ぐために Windows-31J による変換を行う様に指定するには、Content-typeヘッダに埋め込むのエンコーディング名に W