Firefox: Greasemonkey 0.5 βが公開

セキュリティ対策を施した Greasemonkey 0.5 βが公開された。blog 上で、変更点について説明されているほか、ユーザスクリプトを書く人向けの注意点も挙げられている。

Greaseblog - Greasemonkey 0.5 Beta
http://greaseblog.blogspot.com/2005/07/greasemonkey-05-beta.html

セキュリティ関連の変更点

Greasemonkey脆弱性として指摘されていたのは、ウェブページ内に埋め込まれたスクリプトから、Greasemonkey とユーザスクリプトを「つかまえる」ことができてしまうという点。

  • Greasemonkey の機能やユーザスクリプトに、ウェブページ内のスクリプトから DOM 経由でアクセスできてしまっていた。特に、その中に「ローカルファイルへのアクセスを許してしまう関数」があったため、悪意を持ったウェブページ作者が、閲覧者のローカルファイルを読めてしまっていた。
  • ユーザスクリプトがページ内部で実行されるため、ユーザスクリプトがページ内に情報を追加すると、ウェブページ内のスクリプトからその内容に DOM 経由でアクセスできてしまっていた。
  • ユーザスクリプトがページ内部で実行されるため、ウェブページ内のスクリプトが DOM や Dynamic HTML の機能を置き換えると、ユーザスクリプトがそちらを使ってしまっていた。

先日公開された Greasemonkey 0.3.5 では、とりあえず「ローカルファイルへのアクセスを許してしまう関数」を削除するという緊急の回避策が取られていたが、0.5 ではより抜本的な対策が行われている。

  • Greasemonkey の機能やユーザスクリプトは、ページの外で実行されるようになり、ページ内部のスクリプトが無条件にアクセスすることはできなくなった。
  • ユーザスクリプトが DOM を参照する際、ページ内からではなく、Firefox の提供する特殊オブジェクト経由で行うようになった。
  • Firefox 1.5 ではさらに、document オブジェクトや window オブジェクトへのアクセスも特殊オブジェクト経由になる。

blog の記述によると、「Greasemonkey で今までマズかったのって、2 つの異なる信頼ドメインに属してるスクリプトを、いっしょくたに実行してたトコなんだよね。完璧な対策なんてないけど、これでずいぶんよくなるはずだよ」(意訳かつ抄訳) という。

ユーザスクリプトを書くときの注意点

  • window や document に、プロパティや関数を追加しない。後からそれを参照しようとしても、ウェブページ内のスクリプトにすりかえられている可能性があるよ。
  • DOM とかにアクセスするときは、"document." とか "window." から書く。Firefox 1.5 以降で、ウェブページ内のスクリプトのだまされずにアクセスできるから。
  • できるだけ Firefox 1.5 で動作確認する。Firefox 1.0 より 1.5 の方が厳格だから、1.0 で動いても 1.5 で動かないかもね。