■Mozillaとalert()

発端

ある人からメールが来ました。1通目で仰るには、Mozilla FirefoxIEよりもXSS脆弱性に対して強いので是非お勧めしたい、とのこと。hoshikuzu | stardustの書斎でもその方向で何か書いてくれ、云々、という内容です。根拠は特に書いていなかったのでこちらからのお返事では、参考にしたいからとMozilla優位の根拠の具体例を教えてくださいとしておきました。

で、私が思った事。IEでは確かにブラウザそのものから起因するXSS脆弱性が残っていますね。でもまぁ歴史的に見ればMozillaにもブラウザ起因のXSS脆弱性があったはずですし、一時点では決められないかもしれません。長いスパンで見たらIEは確かに多量に脆弱性が見つかっているけれど、それはブラウザ起因のXSS脆弱性という意味においてではないですし。ではメールをくれた彼はサーバサイドが原因の普通のXSS脆弱性のことを言っているのかもしれず、だとしたらブラウザ間でそんなに差が出るものなのかどうか、ですね。スタイルシート関連からjavascriptなりなんなりが起動してしまうことを考えて見ますと確かにIE独自のものもありますが逆にIEでは作動しなくてMozillaだけで作動するような拡張もありますしね、ええと、、等など色々考えながら待っていましたら、第2通目のメールが。その後もやりとりをしばらく集中的に続けました。今はお互い忙しいので停止中です。

第2通目で主張のMozillaの対XSS脆弱性の優位について

興味深いので許可を頂いて引用します。文章は変えました。

Mozillaでは、以下においてalert()が出ないのでXSS脆弱性が無い

<img src="javascript:alert('1');" />

XSS脆弱性の検査にalertを使って例示している文献が多いせいかこの例題にはまった模様です。

確かにMozillaではこのような形ではalertすることは出来ません。しかしXSS脆弱性に対して強いということには全然ならないわけでして。このことを中心にメールでやりとりを繰り返しました。先方はプロの人ですが私は素人ですので素朴なやりとりしか出来ませんでしたが、面白かったです。あんまり詳しい文法とかこちらは知りませんでしたがそれでも勉強になりました。

やりとりで得られたもの

Mozilla Firefoxにおけるalert()の挙動を見るためのサンプル

<html>
<head>
<script>
function a(o){alert(o);};
</script>
</head>
<body>
<ol>
<li><img src="javascript:alert('1');" /></li>
<li><img src="javascript:a('2');" /></li>
<li><img src="javascript:(function (o){alert(o);})(3);" /></li>
<li><img src="javascript:(function b(o){alert(o);})(4);" /></li>
<li><img /><script>(function (o){alert(o);})(5);</script></li>
</ol>
</body>
</html>

この例はかなりHTMLの文法的にはおかしいですのですが許してください。

数字の1から5までをalertしてみるつもりのHTMLです。IEOperaでは全部表示されましたがMozilla Firefoxでは一部表示されません。また、そのままリロードするとかなりMozilla Firefoxの動作に負荷がかかるようです。もっともこれは仕様だと思われますが詳しい事はわかりません。ところで何ゆえ無名関数の直接記述だと駄目なのか開発者さん達に聞いてみたいのですが、この願いなかなかかないますまい。上であらかじめ全部どうなるのか予想できる人は神。