BitArts Blog

ロードバイク通勤のRubyプログラマで伊豆ダイバー。の個人的なブログ。

IE7のセキュリティその1:ブラケット無しXSS

ちゃんと確認できてないのですが、どうもIE7では、CSSのURL値指定でjavascriptスキームのURLを指定できなくなったみたいです。 IE6では、CSSで background: url(javascript:~~~); とか書くと、中のJavaScriptが動いていました。 この仕様の何が問題かと言うと、クロスサイトスクリプティング対策が不十分なWebアプリケーションで脆弱性となる場合があるからです。 例えば、リクエストでHELLOという値が与えられた際に、次のようなinputタグを出力するアプリがあるとします。 この場合、もしXSS対策が何も考えられていない(サニタイズしていない)場合、 "> と入力されると "> となって終わりです。 そこで対策としてサニタイズが必要になるわけですが、このとき、「」だけをサニタイズして安心していると、 " style="background:url(javascript:alert('XSS')) とやられ、 となって、IE6まではこれでスクリプトが動いてしまっていました。 どうも属性値では「"」をサニタイズしないフレームワークがあるっぽいです。この問題は、一見「ちゃんとXSS対策しているよ!」というサイトで、たびたび見受けられます。 ちなみにIE7でも、これ↓は受け入れて動いてしまうようです。結局ダメなんじゃん。ということで。 style="xss:expression(javascript:alert('xss'))" というわけで、サニタイズは少なくとも「」「"」「&」これらに対して適切に行いましょう。これはIEの変な仕様が悪いわけでもなく、アプリ側の責任です。