alert(0)されたら

XSS (Cross Site Scripting) Cheat Sheetなど、いろいろあるXSS対策まとめページで、しばしば、alert('XSS')の方法の変種について書いてあります。このページでも同様で、String.fromCharCodeを使えば、悪意ある文字列を仕込むときに引用符を使わなくてもいいじゃん?みたいなことが書いてあります。このほか、/xss/.sourceを使えるとかの解説も世に多いわけです。
でもちょっと待って!alert(/XSS/.source)や、alert(String.fromCharCode(88,83,83))などのバリエーションなぞ、本物の攻撃者はあんまり使わないんじゃないかな?どうです?…というのは、alert(0)が出来たらそれで終わりじゃないの?という気がするからです。文字列をalertじゃなくて、数字がalertできたらほとんど攻撃成立じゃないの?ということなんです。
alert(0)が可能ということは、恐らく、関数の記述が通り抜けるということ。だったら、alert(0)に機械的に置換することで、無条件で、以下の記述も可能なのでしょう。


eval(unescape(location))
タイプ1のXSS脆弱性があるのであるならば、これで攻撃が成立してしまいますよね?多くの場合。(これを、先日の詰めXSS問題で使ったわけです。)ですから、/xss/.sourceみたいな技術は必要ない、と言えてしまうのではないのでしょうか?

ですから、防衛の際には、いかなるスクリプトの注入も許してはならないという一点で考えれば良いのであって、XSS Cheat Sheet に書いてることを全部考慮しなくてはいけないと思い込むのはなんだか残念なのです。もちろん、上のページは有益ですが。それでもね、読む方もそれなりの意識でもって読むべきだと思うのですよね。