Wie erzwinge ich die Installation einer nicht verifizierten Firefox-Erweiterung in 41.0b1 +?

15

Das neueste Update für Firefox (41.0b1) blockiert aggressiv die Installation nicht verifizierter Erweiterungen, nämlich HTTPS Everywhere und Privacy Badger .

Wie kann ich die Installation dieser Erweiterungen erzwingen? Gibt es eine Einstellung, die about:configich vorübergehend ändern könnte?

Mozilla hebt diese Änderung an Firefox hier hervor und verweist auf seine früheren Bemühungen, böswillige Erweiterungen ineffizient zu korrigieren.

VitaminYes
quelle

Antworten:

19

Ja, es gibt eine Einstellung in About:config, der Name lautet xpinstall.signatures.required. Doppelklicken Sie auf den Einstellungsnamen, damit sein Wert auf false gesetzt wird. Jetzt können Sie nicht signierte Erweiterungen in Firefox installieren. Ein Neustart des Browsers ist nicht erforderlich.

Suzana
quelle
2
Fantastisch! Dieses Update wird ausreichen, bis EFF und andere Erweiterungen überprüft haben.
VitaminYes
1
Dies wird auch nach Version 43+ nicht mehr funktionieren. :(
Suresh Atta
Obwohl viele Quellen sagten, dass es in neuerem FF nicht funktionieren wird, funktionierte es für mich in 48.0 unter Linux. Ich musste die Addons-Seite öffnen und die xpi-Datei dorthin ziehen.
Der Brasilianer
@ThatBrazilianGato: Es funktioniert nicht für mich auf Win7 FF48.0 :(
glavić
4
Das war's für mich. Tschüss Firefox, ich habe dich seit Version 0.6 geliebt. :-( Hoffe, es wird eines Tages eine Problemumgehung geben.
andreas
2

In Firefox 48 und höher funktioniert diese Methode nicht. Stattdessen sollten Sie zwei Konfigurationsdateien im Firefox-Verzeichnis erstellen.

  1. Erstellen Sie die Datei config.js im Editor (stellen Sie sicher, dass die Dateierweiterung .js und nicht .txt lautet ):

    //
    try {
    Components.utils.import("resource://gre/modules/addons/XPIProvider.jsm", {})
    .eval("SIGNED_TYPES.clear()");
    }
    catch(ex) {}
    
  2. Verschieben Sie config.js in Ihr Firefox-Installationsverzeichnis:

    Windows: C: \ Programme \ Mozilla Firefox
    (oder C: \ Programme (x86) \ Mozilla Firefox )

    Linux: / usr / lib64 / firefox- <version>
    (oder / usr / lib / firefox- <version>)

    Mac: /Applications/Firefox.app

  3. Erstelle config-prefs.js im Editor :

    pref("general.config.obscure_value", 0);
    pref("general.config.filename", "config.js");
    
  4. Verschieben Sie config-prefs.js in das Firefox -Verzeichnis defaults \ pref .
    (zB C: \ Programme \ Mozilla Firefox \ Defaults \ Pref )

  5. Starten Sie Firefox neu.

  6. Ziehen Sie das nicht signierte XPI in das Firefox-Fenster oder verwenden Sie die Option "Add-on aus Datei installieren" in den Einstellungen der Firefox-Add-ons.


Entstanden aus dieser Quelle: https://forum.mozilla-russia.org/viewtopic.php?id=70326

Noam Manos
quelle
Leider scheint diese Methode auf 64-Bit-Versionen von FF 66.0.3 nicht zu funktionieren. Es wäre jetzt dringend nötig, da Mozilla die GROSSE Zeit verdorben hat.
CoolKoon
1

Offenbar auf 60 Firefox und darüber weder die xpinstall.signatures.requirednoch die config.js Trick oben genannten Arbeiten skizziert (Mozilla, umkippen bitte!).

Das russische Forum, auf das oben Bezug genommen wurde, erwähnt anscheinend auch eine Lösung für diese Versionen von Firefox. Fügen Sie dies stattdessen in die Datei config.js ein, die Sie dann unter C: \ Programme \ Mozilla Firefox speichern

//
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);
}

Anschließend müssen Sie dies der Datei config-prefs.js hinzufügen, die unter C: \ Programme \ Mozilla Firefox \ defaults \ pref gespeichert ist

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

Es wurde getestet, um auf FF 66.0.3 zu funktionieren. Leider bringt es deine Addons und Themes nicht auf magische Weise zurück, aber es aktiviert zumindest die Option, sie erneut zu installieren. Besser als alles, was Mozilla zu bieten hat, da sie sich anscheinend nicht sonderlich darum kümmern, obwohl ihre Foren mit Beschwerden über dieses Problem überflutet sind.

CoolKoon
quelle
Wenn Sie das wirklich wirklich wollen, installieren Sie keine zufälligen Hacks, sondern verwenden Sie einfach ein Nightly, bei dem die Zeichenfolge signatures.required tatsächlich aktiviert ist.
Félix Saparelli
1
Und warum sollte ich Bis jetzt konnte ich keine Probleme damit haben, eine meiner Meinung nach stabile Version von FF zu verwenden, bei der ich nur legitime und echte Addons direkt von der offiziellen Addon-Site von Firefox installiert habe. Und jetzt haben all diese Addons (und Themen, um Himmels willen!) Plötzlich aufgehört zu arbeiten. Es tut mir leid, aber anstatt eine möglicherweise noch kaputtere Version von FF zu installieren, bevorzuge ich etwas, das meine aktuelle Installation zum Laufen bringt.
CoolKoon
PS Die Addons funktionieren nicht mehr auf der Android-Version von FF (v66.0.2), die auch auf meinem Handy läuft, aber seltsamerweise xpinstall.signatures.requiredscheint das immer noch dort zu funktionieren.
CoolKoon