ウェブアプリケーションセュリティ読後感5

IEが変な挙動の場合のサーバー側対処策

IEが変な挙動の場合でXSS等が発生する場合に、サーバー側対処策としてHTTPのレスポンスヘッダにおいて適切に表現してさしあげることになりますね。

一例としてUTF-7エンコードされたタグ文字列によるXSS脆弱性を考えると、ページの文字エンコーディングを強制する指定をする、つまり、Content-Type: text/html; charset=エンコーディング名 といった指定をHTTPのレスポンスヘッダないし、HTMLの「<meta http-equiv="Content-Type" content="...」に記述することを考えるわけです。

これ、セキュ的には両方ともしなくちゃならないってことを、今回のかなとこさんの著書で初めて知ったのです。レスポンスヘッダだけで十分かと思っていました(汗)

金床さんありがとう。

私はmeta要素を省く傾向がありました

そもそも文字エンコーディングの指定は、サーバー側からのレスポンスヘッダで指定すべきであって、HTMLファイル中のmeta要素による記述はおまけ的な代替手段であり、meta要素だけですませている場合にはRFCの思想的にどうよ?という気持ちがあったのでした。そういう風に教育されていましたし。今でもそう信じていますし。(ローカルにダウンロードすることを目的としている場合には別。)

レスポンスヘッダだけの場合にどうよ

金床さんのウェブアプリケーションセュリティを読んで初めて知ったのですが、IEでは、キャッシュされるときに、レスポンスヘッダの情報は消えているわけで、レスポンスボディだけがキャッシュされている、ということなのですね。

で、フレームで読み込んだ後、そのフレームの中身を変えて、JSPかなんかでJavaScriptを起動させ、historyをbackさせてやると、レスポンスヘッダ抜きのキャシュでエンコードを解釈しちゃう可能性があるわけで。

おことわり

上記に書いたことは実際にどうなるのか、私にはわかりません。また、文字エンコーディングの指定以外でも、IEのブラウザがヘタレなためにレスポンスヘッダを工夫してやる措置の場合にどうなるかもよくわかりません。

教えてください。