メモ::文字化け
文字化けに関する原因一覧表があったのでメモ。ただし、ここにのっていないのもある。
激しく力作也。JavaScriptでエキセントリックに関数の記述をしてみた
いえ、実践的なXSS防御の話ではないのです。どうみても役に立たないことを少しばかり。昨晩ごにょっていて個人的に面白かったので。
<script>
for(J in{to:0})for(K in{String:0})for(L in{char:0})for(M in{At:0}){{a=(198)[J+K](16)}{alert(a[L+M](0))}}
</script>
ええと、手書きで上に書いたコードが正しければ、きっと、"c"がalertされると思います。このコードを読んだだけでわかった人はエライです。基本的にOperaとFirefoxとIEとで動作させたいのと…
使っていいメタキャラは最小限にしたかったので、「:」「(」「)」「{」「}」「[」「]」「+」「=」あたりで。本当は「+」「=」も使いたくないのですけれど今後の課題です。
逆に使わないメタキャラとしては、「&」「<」「>」「"」「'」「.」「,」「\」「%」「/」あたりを目標。なんてイジワルなんだ! 「.」を使えないと痛いなぁとか思ったり。それと、文字を表現するのに便利そうな「\」「%」「/」とかも禁止の方向で。
ほいでもって、何か.toString()とか何か.charAt()とかを使いたいわけですよ。このへんの工夫で結構死にました。JとKとを分離しているのは、IE対策だったりします。伊達じゃぁありません。
この後での狙いは、document.cookieをattacker.tldに飛ばすことができるサンプルですね。あとひといき。"c"がalertじゃなくて、"%"をalertできるように、まずは考えなくちゃ。脳内ではできているんだけれど。
2008/02/14追記: 脳内に浮かんでいたものよりもイイ感じのコードが作れました。ISO-8859-1で作動。「+」「=」は使わなくてもよくなったけれど、かわりに「$」を使いました。EUC-JPなら「$」は不要なんだけれども。でもまぁ「$」ってJavaScript的にはメタキャラではないのでは?結局のところ、「$」「:」「(」「)」「{」「}」「[」「]」で、「%」をalertすることができましたし、次の瞬間に「<」ほか、禁止されたメタキャラは全部alertできそうだという結論に。…できあがったコードをひとばんおいて朝見てみたら、不思議な気分に。コンカチしているおかげで、「char」と「At」が今度こそ本当に離れ離れ(はなればなれ)に。ひとばんおいた初見で読めないものになってしまいました。
はてなダイアリーが誰でも編集できる状態になっていたらしい
ガクブル。というか何?はてな