IEのinnerHTMLにおけるバッククォートバグ問題について
id:hasegawayosukeさんによる、IEのinnerHTMLにおけるバッククォートバグ問題について脚光をあびていますが、私が最初にその問題について知ったのは以下の記事からです。2007年4月11日の長谷川さんの日記です。有益ですので当該日記のコメント欄も参照してください。
http://d.hatena.ne.jp/hasegawayosuke/20070411/p1
全ての文字をエスケープしようなどと非現実的なことは言わないけれど(とはいえMicrosoft Anti-Cross Site Scripting Libraryのようにほとんど全ての文字を実体参照に置き換えるものもあるので、あながち非現実的とも言えないのかも知れない)、エスケープ対象を「'」「"」「<」「>」「&」の5文字に限定しているのは何かこの記事に書かれていない理由があるはずだと思ったからです。
この5文字さえ確実にエスケープしていれば XSS が防げるかというと、多分そうでもないだろうと個人的には思うわけでして。
どうせならもっと積極的にエスケープすればよいのに、と思ったのでした。
以下はおまけ。IEでは innerHTML を取得した時点で属性値の前後の引用符が消えるため、スクリプトの注入ができます。
※hoshikuzu注::以下、バッククォートをinnerHTMLで出力するPoCが記されている。
えむけい 2007/04/12 09:41ところでinnerHTMLを取得した時点で文字参照がデコードされるので、「`」をエスケープしたところで意味ないようですが。>おまけ
ユーザー入力を含んだものをinnerHTMLで操作するのがそもそもの間違いでしょう。
hasegawayosuke 2007/04/12 09:47「`」をエスケープしても意味がないからおまけなのですw
innerHTMLでの操作が間違いなのかどうなのかはよくわかりませんです。//というか、<input>に「`」だけ入れて印刷プレビューでHTMLが崩れるIEがそもそも間違いだと思います。
長谷川さんは、2008年10月にIE 8のベータ版に関してのフィードバックの募集に際してこの件についてのレポートを提出されたとのことですが、実際には2007年の4月より以前から長谷川さんは対応に苦しまれていたわけでして、、表に出ていない交渉もおそらくありえたかと。hoshikuzu的には「本当にお疲れ様です」としか言いようがありません。
みなさん、この問題について「これはひどい」という声を盛大にまきおこしましょう。