未検証のFirefox拡張機能を41.0b1 +に強制的にインストールする方法は?


15

Firefox(41.0b1)の最新のアップデートは、未検証の拡張機能、つまりHTTPS EverywherePrivacy Badgerのインストールを積極的にブロックします。

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

MozillaはここでFirefoxへのこの変更を強調し、悪意のある拡張機能を非効率化するための以前の努力に注目しています。

回答:


19

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


2
素晴らしい!この修正は、EFFなどが拡張機能を検証するまで十分です。
ビタミンはい

1
これは、バージョン43以降では機能しません。:(
Suresh Atta

最近のFFでは動作しないと多くの情報筋が言っていますが、Linuxの48.0では動作しました。アドオンページを開いて、そこにxpiファイルをドラッグする必要がありました。
そのブラジル人の男

@ThatBrazilianGato:Win7 FF48.0で私のために働いていません:(
glavić16年

4
これで終わりです。さようならFirefox、バージョン0.6以来あなたを愛していた。:-(いつか回避策があることを願っています。
andreas

2

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

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

    //
    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. 移動コンフィグ-にprefs.jsのFirefoxにデフォルト\県のディレクトリ。
    (例:C:\ Program Files \ Mozilla Firefox \ defaults \ pref

  5. Firefoxを再起動します。

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


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


残念ながら、この方法はFF 66.0.3 64ビットでは機能しないようです。MozillaがBIGの時間を台無しにしてしまった今、それが切実に必要とされるでしょう。
CoolKoon

1

どうやらFirefox 60以降では、上記で説明しxpinstall.signatures.requiredconfig.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);
}

次に、これをC:\ Program Files \ Mozilla Firefox \ defaults \ prefに保存されたconfig-prefs.jsファイルに追加する必要があります

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

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


これが本当に必要な場合は、ランダムハックをインストールせずに、signatures.required設定文字列が実際に有効になっているNightlyを使用してください。
フェリックスサパレリ

1
そして、なぜ私はする必要がありますか?これまで、私はFirefoxの公式アドオンサイトから正規の正規のアドオンのみをインストールしたFFの安定版と考えていたものを使用することに完全に満足していました。そして今、これらすべてのアドオン(およびキリストのために!)が突然機能しなくなりました。申し訳ありませんが、FFのさらに壊れている可能性のあるバージョンをインストールする代わりに、現在のインストールが動作するものを好みます。
CoolKoon

PSアドオンは、私の携帯電話で実行されているAndroidバージョンのFF(v66.0.2)でも動作を停止しましたが、不思議なことに、xpinstall.signatures.requiredまだ動作しているようです。
CoolKoon
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.