Greasemonkeyのセキュリティ(古い情報)

古い情報がたくさんヒットして今どうなってるのかわかりにくい。

O'Reilly Network -- Avoid Common Pitfalls in Greasemonkey

Greasemonkeyがベースっぽい。

Security Hole #1: Source Code Leakage

これよくわかんない。
gmの古い実装だとページの最後にscriptタグを入れて実行してたと予想。
そもそもいまはこういう実装になってないので問題は発生しない。

Security Hole #2: API Leakage

これはXPCNativeWrapperとevalInSandboxと__parent__の改修で解決済みの問題。
グローバルオブジェクト(スコープチェインのひとつ外側)はwindowでなくなっている。

Security Hole #3: Local File Access

GM_xmlhttpRequestでローカルファイルにアクセスできたというはなし。
今も特権モードXMLHttpRequestはローカルファイルにアクセスできるが、リクエストする前にスキーマのチェックが入っている。

  var ioService = Components.classes["@mozilla.org/network/io-service;1"]
                  .getService(Components.interfaces.nsIIOService);
  var scheme = ioService.extractScheme(url);

  // This is important - without it, GM_xmlhttpRequest can be used to get
  // access to things like files and chrome. Careful.
  switch (scheme) {
    case "http":
    case "https":
    case "ftp":
      this.chromeWindow.setTimeout(
        GM_hitch(this, "chromeStartRequest", url, details), 0);
      break;
    default:
      throw new Error("Invalid url: " + url);
  }

gopherはNG.ftpがいけるのは意外。
これも解決済み。

PitfallsはXPCNativeWrapperまわりによるはまりどころを具体的にあげてある。
Pitfall #9: watch 以外は代替策がある(のを知ってる。location.hrefへの代入に限ればwatchしなくてすむ方法はありそう。unloadイベントをobserveするとか)。