[これはひどい]IEの引用符の解釈 − @IT(情報元のブックマーク数)

きゃぁーーー!われらがアイドルキタ━━━━(゜∀゜)━━━━ッ!!

皆さん、はじめまして。はせがわようすけと申します。

[これはひどい]IEの引用符の解釈 (1/3):教科書に載らないWebアプリケーションセキュリティ(1) - @IT

属性値をくくる引用符としてはダブルクオーテーション「"」、シングルクオーテーション「'」の2種類がありますが、実はIEの場合、バッククオーテーション「`」も属性値を囲む場合の引用記号として利用可能です。

[これはひどい]IEの引用符の解釈 (2/3):教科書に載らないWebアプリケーションセキュリティ(1) - @IT

うはぁ、、大変なのはわかるけど、このあたりから理解不能に・・・

ここではinnerHTMLを例に挙げていますが、outerHTMLを使用した場合でも同様の問題が発生します。ただし、outerHTMLはWebブラウザ間の互換性の問題からinnerHTMLほど積極的には使われていませんので、問題が顕在化することも少ないでしょう。

 誤解していただきたくないのは、「攻撃者のコードを含むinnerHTMLのコピーはHTMLの出力に相当する。エスケープしてコピーしていないのが悪い」というのではない点です。

 HTML生成時に必要なエスケープは(1)の部分を生成する時点で完了しており、innerHTMLのコピーではコピー元とコピー先のDOM構造は一致するべきで、この例のようにDOM構造がコピー前後で異なってしまうというのは、理解しがたい挙動なのです。

[これはひどい]IEの引用符の解釈 (3/3):教科書に載らないWebアプリケーションセキュリティ(1) - @IT

直接フィードバックを投げているid:hasegawayosukeは++。いつもすごい!

さて、このIEの挙動についてですが、脆弱性とはいわないまでもセキュリティ上好ましくない挙動であるので修正されるべきではないかと私は考えました。

 2008年10月ごろのことですが、ちょうどIE 8のベータ版に関してフィードバックを募集していましたので、この件についてレポートを提出しました。ところが、その返事は残念ながら「よいフィードバックだが、Backward Compatibilityのためにバッククオーテーションによる引用符をサポートし続ける。属性値として出力する場合には、ダブルクオーテーションやシングルクオーテーションで囲むという回避策をとってほしい」というものでした。

[これはひどい]IEの引用符の解釈 (3/3):教科書に載らないWebアプリケーションセキュリティ(1) - @IT

こういう記事で、理解されると世界は変わるかもしれませんね!みんなでがんばりましょう!

マイクロソフトの実装にはひどいところも多いと思いますが、それでも改善を主張する声が集まれば、決してそれを無視する会社ではないと信じています。この記事を読んで、IEのこの仕様について「これはひどい」と思った方がもしおられましたら、ぜひ一緒に声を上げてほしいと思います。

[これはひどい]IEの引用符の解釈 (3/3):教科書に載らないWebアプリケーションセキュリティ(1) - @IT

screenshot