web-dev-qa-db-ja.com

検証されていないFirefox拡張機能を41.0b1 +に強制インストールする方法は?

Firefoxの最新アップデート(41.0b1)は、検証されていない拡張機能、つまり HTTPS Everywhere および Privacy Badger のインストールを積極的にブロックします。

これらの拡張機能を強制的にインストールするにはどうすればよいですか?内部に設定はありますかabout:config一時的に切り替えられますか?

Mozillaは、Firefoxへのこの変更を強調しています here は、以前の取り組みが悪意のある拡張機能をまとめるのに非効率的であることを指摘しています。

15
VitaminYes

はい、About:configに設定があり、その名前はxpinstall.signatures.requiredです。プリファレンス名をダブルクリックして、その値をfalseに設定します。これで、Firefoxに未署名の拡張機能をインストールできます。ブラウザの再起動は必要ありません。

19
Suzana

Firefox 48以降では、この方法は機能しません。代わりに、Firefoxディレクトリ内に2つの設定ファイルを作成する必要があります。

  1. メモ帳でconfig.jsファイルを作成します(ファイル拡張子が。jsであることを確認してください- 。txt):

    //
    try {
    Components.utils.import("resource://gre/modules/addons/XPIProvider.jsm", {})
    .eval("SIGNED_TYPES.clear()");
    }
    catch(ex) {}
    
  2. config.jsをFirefoxのインストールディレクトリに移動します。

    Windows:C:\ Program Files\Mozilla Firefox
    (またはC:\ Program Files(x86)\ Mozilla Firefox

    Linux:/ usr/lib64/firefox- <version>
    (または/ usr/lib/firefox- <version>)

    Mac:/ Applications/Firefox.app

  3. メモ帳でconfig-prefs.jsを作成します。

    pref("general.config.obscure_value", 0);
    pref("general.config.filename", "config.js");
    
  4. config-prefs.jsをFirefoxdefaults\prefディレクトリに移動します。
    (例C:\ Program Files\Mozilla Firefox\defaults\pref

  5. Firefoxを再起動します。

  6. 未署名のXPIをFirefoxウィンドウにドラッグするか、Firefoxアドオンの設定で[ファイルからアドオンをインストール]オプションを使用します。


このソースから発信: https://forum.mozilla-russia.org/viewtopic.php?id=70326

2
Noam Manos

どうやらFirefox 60以降ではxpinstall.signatures.required上記で概説したconfig.jsトリックも機能します(Mozilla、キールオーバーしてください!)。

上記で参照されているロシアのフォーラムでは、Firefoxのこれらのバージョンのソリューションについても言及しています。だからこれをconfig.jsに入れて、それをC:\ Program Files\Mozilla Firefoxに保存します

//
try {(code => {
    var {classes: Cc, interfaces: Ci, utils: Cu} = Components;
    var jsval, evl = true, re = e => Cu.reportError(e), imp = name => {try {
        return Cu.import(`resource://gre/modules/addons/${name}.jsm`, {});
    } catch(ex) {}}
    if ((jsval = imp("AddonSettings"))) {
        jsval.AddonSettings = {ADDON_SIGNING: false, REQUIRE_SIGNING: false, ALLOW_LEGACY_EXTENSIONS: true};
        try {evl = jsval.eval("this") === jsval;} catch(ex) {evl = false;}
    }
    var jsvals = ["XPIProvider", "XPIInstall"].map(imp).filter(i => i);
    jsvals[0].AddonSettings && lockPref("extensions.allow-non-mpc-extensions", true);
    jsvals[0].signaturesNotRequired = true;

    if (evl) return jsvals.forEach(jsval => {try {jsval.eval(code);} catch(ex) {re(ex);}});

    var sl = Cc["@mozilla.org/moz/jssubscript-loader;1"].getService(Ci.mozIJSSubScriptLoader);
    Cu.importGlobalProperties(["URL", "Blob"]); var url = URL.createObjectURL(new Blob([(code)]));
    jsvals.forEach(jsval => {try {sl.loadSubScript(url, jsval);} catch(ex) {re(ex);}});

})(String.raw`((vzss, pckg) => {
    var trueDesc = {enumerable: true, value: true};
    typeof Extension == "function" && Object.defineProperty(Extension.prototype, "experimentsAllowed", trueDesc);
    "AddonInternal" in this && Object.defineProperty(AddonInternal.prototype, "providesUpdatesSecurely", trueDesc);
    this.isDisabledLegacy = () => false;
    if ("XPIDatabase" in this) this.XPIDatabase.isDisabledLegacy = () => false;
    try {SIGNED_TYPES.clear();} catch(ex) {};

    if (!vzss && !pckg) return;

    var re = /\x06\x03U\x04\x03..(\{[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\}|[a-z0-9-\._]*\@[a-z0-9-\._]+)0\x82\x02"0\r\x06\t/i;
    var getUUID = () => {
        var gen = Cc["@mozilla.org/uuid-generator;1"].getService(Ci.nsIUUIDGenerator);
        return (getUUID = () => gen.generateUUID().toString())();
    }
    var getIdFromString = str => {
        var match = str && str.match(re);
        return match ? match[1] : getUUID();
    }
    var getState = arg => ({
        signedState: AddonManager.SIGNEDSTATE_NOT_REQUIRED,
        cert: typeof arg == "object" ? arg : {commonName: arg}
    });
    var checkAddon = addon => {
        if (addon.id || (
            "_installLocation" in addon
                ? addon._installLocation.name == KEY_APP_TEMPORARY
                : addon.location.isTemporary
        ))
            return getState(null);
    }
    var getRoot = () =>
        !AppConstants.MOZ_REQUIRE_SIGNING && Services.prefs.getBoolPref(PREF_XPI_SIGNATURES_DEV_ROOT, false)
            ? Ci.nsIX509CertDB.AddonsStageRoot : Ci.nsIX509CertDB.AddonsPublicRoot;

    if (vzss) {
        var getURI = file => {
            var jsval = Cu.import("resource://gre/modules/addons/XPIProvider.jsm", {});
            return (getURI = file => jsval.getURIForResourceInFile(file, "META-INF/mozilla.rsa"))(file);
        }
        var getIdFromFile = file => {
            var str, is = {close() {}}, sis = {close() {}};
            try {
                is = Services.io.newChannelFromURIWithLoadInfo(getURI(file), null).open();
                sis = Cc["@mozilla.org/scriptableinputstream;1"].createInstance(Ci.nsIScriptableInputStream);
                sis.init(is);
                str = sis.readBytes(sis.available());
            } catch(ex) {}
            sis.close(); is.close();
            return getIdFromString(str);
        }
        this.verifyZipSignedState = function verifyZipSignedState(aFile, aAddon) {
            var res = checkAddon(aAddon);
            return res ? Promise.resolve(res) : new Promise(resolve => {
                var callback = {openSignedAppFileFinished(rv, zipReader, cert) {
                    zipReader && zipReader.close();
                    resolve(getState(cert || getIdFromFile(aFile)));
                }};
                gCertDB.openSignedAppFileAsync(getRoot(), aFile, callback.wrappedJSObject = callback);
            });
        }
    }

    if (pckg) Package.prototype.verifySignedState = function verifySignedState(addon) {
        var res = checkAddon(addon);
        return res ? Promise.resolve(res) : new Promise(resolve =>
            this.verifySignedStateForRoot(addon, getRoot()).then(({cert}) => {
                if (cert)
                    resolve(getState(cert));
                else
                    this.readBinary("META-INF", "mozilla.rsa").then(
                        buffer => resolve(getState(
                            getIdFromString(String.fromCharCode(...new Uint8Array(buffer)))
                        )),
                        () => resolve(getState(getUUID()))
                    );
            }, Cu.reportError)
        );
    }
})(
    "verifyZipSignedState" in this, typeof Package == "function"
);`)} catch(err) {
    err.message != "Components is not defined" && Components.utils.reportError(err);
}

次に、これをconfig-prefs.jsC:\ Program Files\Mozilla Firefox\defaults\pref

pref("general.config.obscure_value", 0);
pref("general.config.filename", "config.js");
pref("general.config.sandbox_enabled", false);

FF 66.0.3で動作することがテストされています。残念ながら、アドオンやテーマを魔法のように戻すことはできませんが、少なくともそれらを再インストールするオプションを再び有効にします。いずれにせよ、Mozillaが提供しているものよりも優れています。彼らのフォーラムがこの問題についての不満で溢れているにもかかわらず、彼らは特に気にしていないようです。

1
CoolKoon