はびこる「ぼくはまちちゃん」の秘密

リンクは張らないが、(はてなにログインしていると)見るだけで、自分のはてなダイアリに勝手な文章を追加し、勝手に件のページのブックマークをするページがあるようだ。被害の様子はそのページのブックマークページ(http://b.hatena.ne.jp/entry/http://d.hatena.ne.jp/Hamachiya2/20060204/1138998854)で見れる。そのブックマークページにあるリンクを辿ると、当然ひっかかるので、知識のないIEユーザーは辿ってはいけません.
普段使わないブラウザではてなからログアウトしているのを確認してから、件のページをのぞいてみた。そのページには、JavaScriptコードが埋めこまれていて、そいつが、外部Javascript*1を起動する。で、この外部JavaScriptは、こっそりIFrameを開いて、ユーザーの「日記を書く」ページにアクセスし、勝手な文章をsubmitするという仕組み。本来、はてなダイアリには、はてなが用意した以外のJSコードは埋めこめないようになってるはずだけど、そこをすり抜けてるわけやね。

これ、こうやって おおっぴらに宣言されてるからまだいいけど、黙ってやられたら絶対気がつかないよな。JavaScript必須のAjaxサイトにこんなコードがまぎれこんでいたら、ブラウザからアクセスするタイプのブログサービスは思いきり好き放題やられてしまう。ダイアリ全消去とかブックマーク全消去とかできるよね?
どうやったら防げるんだろ。scriptタグの動的生成によるクロスドメイン越えのJSコード実行、及び、XMLHTTPRequest,IFrameでのクロスドメインアクセスが完全に禁止されてたら良いのかな。XMLHTTPRequestとIFrameのほうは今でも禁止されてるんだっけ。
でも、そこまですると外部の情報取りにいくようなAjaxツールが作れなくなるなあ。うーん、もうちょっとまともなセキュリティモデルはないのか。せめて、実行されうるコードは全部検証するくらいの機構が必要だよなあ。
あれ、もしかして、IFrameの存在だけが元凶?XMLHTTPRequestだけでは今回のは構成できないのかな。いや、そんなことないよな。あれ?どっちだろ。教えて偉い人!

蔓延の仕組み

あーそうか、このスクリプト、自分自身が埋めこまれているページを自動的にブックマークさせるんだな。結果、ひっかかる人が増えるほどブックマーク数が増えていって、あろうことかそのページが「人気ページ」になってしまう、と。なるほどねー。
もし、今IFrameでのクロスドメインアクセスが禁止されていないとすると、同じ仕組みのスクリプトで「自分のブログのエントリのブックマーク数を勝手に押しあげる」ってのが作れるな。どっかに仕込んどこうかな。

*1:現在、http://hamachiya.com/h2.jsがその実態