いわゆる、document.write するものには エスケープをしないと行けないのではあるが、 location.hash は、サーバーが生成する部分ではないため 見落としやすいのだろうなぁという事を最近思った。 たとえば、nun.nu というリダイレクタ。 古くからあったように思う。 http://nun.nu/ location.hash の値をそのまま document.write してしまっている。 もちろん、通常のリダイレクト先URLの部分に関してはきちんと HTMLの特殊文字のエスケープが行われている。 残念な事に結果的に、URLに #hogefuga のように指定する事によって XSS を行う事が出来てしまっているのである。 試しに、alert を出す実証コードをここに示す。(Firefoxでしか動作確認していない。) http://nun.nu/http://www.go