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するとか)。