少々古いOperaでもinnerHTMLで何かを取得すると危うい
はせがわようすけさんによる連載の記事、『[これはひどい]IEの引用符の解釈』が面白かったので手元の少々古めのOpera(9.02ぐらい)で試すことにしました。
<div id="div1">
<input type="text" value="ここに攻撃者の指定した文字列が挿入可能">
</div>
<div id="div2">
</div>
<script>
document.getElementById( "div2" ).innerHTML =
document.getElementById( "div1" ).innerHTML;
</script>
攻撃者の指定した文字列ですが、IEの場合には『``』などを含ませると結果的にDOM構造が壊れるとのこと、私が試した範囲ではOpera(9.02ぐらい)の場合には、『``』の替わりに『"』を入れるとDOMが壊れてしまいました。なお現時点での最新版(9.64)ではこのような問題をみつけられませんでした。Operaサイドでは修正をしたのですね、IEもなおるといいなぁ。2009/11/18追記: もう少し詳しい情報を、Opera9.27におけるinnerHTML取得時の引用符解釈の不備に書きました。