Hatena::ブログ(Diary)

nazonoDiary

2005-07-21 木

Object.watch と Greasemonkey の脆弱性

| 10:57 | Object.watch と Greasemonkey の脆弱性を含むブックマーク Object.watch と Greasemonkey の脆弱性のブックマークコメント

知らなかったのだけれど、Mozilla の Object には watch というメソッド(イベントハンドラ?)がある。

 o=new Object;
 o.p = 1;
 o.watch("p",function( id, oldval, newval ){
   alert("o." + id + " changed from " + oldval + " to " + newval);
   return newval;
 });

のように設定して

 o.p = 2;

とすると

 o.p changed from 1 to 2

と表示される。これはデバッグなんかに最高!


Greasemonkey脆弱性

http://greaseblog.blogspot.com/2005/07/mandatory-greasemonkey-update.html

で、これを利用したGreasemonkey脆弱性が発覚。Greasemonkeyをとりあえず0.3.5にバージョンアップしてください。

要は「悪意あるサイトはGM_* というGreasemonkey拡張APIをつかいまくり! Greasemonkeyの拡張APIを用いて、ローカルハードディスクが読まれまくり!」、ということらしい。

0.3.5では、GM_log 以外の拡張APIが無効にされているようですショボーン NiceLink も動かなくなります…orz

あんまり詳しく説明するのもあれなんで、やめておきますが、一番重要なのは watch は代入される直前に実行される、ということ。シリアルに実行されるはずのjavascriptの実に好きなところに割り込みを設定できる。Greasemonkeyでは「ユーザースクリプトが実行されている間だけGreasemonkey拡張APIが有効になる」というモデルなんですが…。

そんなことできたんだ、と驚くことばっかりです。

zerobasezerobase 2005/07/22 00:37 Objectのwatch/unwatchについて、「JavaScript」第3版158ページ「Navigator4のJavaScript 1.2から」と書いてありました。ご参考になれば幸いです。

nazokingnazoking 2005/07/22 00:56 おお、上の記事のリンク先のページもよく見ると JavaScript1.2から使える、と書いてありますね。IEでは使えないみたいだけど(今試した)。