Come forzare l'installazione di un'estensione firefox non verificata in 41.0b1 +?


15

L'ultimo aggiornamento di Firefox (41.0b1) blocca in modo aggressivo l'installazione di estensioni non verificate, ovvero HTTPS Everywhere e Privacy Badger .

Come potrei essere in grado di forzare l'installazione di queste estensioni? C'è un'impostazione all'interno about:configche potrei cambiare temporaneamente?

Mozilla mette in evidenza questo cambiamento a Firefox qui , notando i suoi sforzi precedenti per essere inefficiente a corralling estensioni maligni.

Risposte:


19

Sì, c'è un'impostazione About:config, il suo nome è xpinstall.signatures.required. Fare doppio clic sul nome della preferenza in modo che il suo valore sia impostato su false. Ora puoi installare estensioni non firmate in Firefox. Non è necessario il riavvio del browser.


2
Fantastico! Questa correzione sarà sufficiente fino a quando EFF e altri avranno verificato le estensioni.
Vitamina Sì,

1
Anche questo non funzionerà dopo la versione 43+. :(
Suresh Atta,

Nonostante molte fonti affermino che non funzionerà negli ultimi FF, ha funzionato per me nella 48.0 su Linux. Ho dovuto aprire la pagina dei componenti aggiuntivi e trascinare lì il file xpi.
Quel ragazzo brasiliano il

@ThatBrazilianGato: non funziona per me su Win7 FF48.0 :(
glavić

4
Questo è tutto per me. Ciao Firefox, ti amo dalla versione 0.6. :-( Spero che ci sarà una soluzione alternativa un giorno.
Andreas

2

Su Firefox 48 e versioni successive, questo metodo non funziona. Invece dovresti creare due file di configurazione nella directory di Firefox.

  1. Crea il file config.js nel blocco note (assicurati che l'estensione del file sia .js e non .txt ):

    //
    try {
    Components.utils.import("resource://gre/modules/addons/XPIProvider.jsm", {})
    .eval("SIGNED_TYPES.clear()");
    }
    catch(ex) {}
    
  2. Sposta config.js nella directory di installazione di Firefox:

    Windows: C: \ Programmi \ Mozilla Firefox
    (o C: \ Programmi (x86) \ Mozilla Firefox )

    Linux: / usr / lib64 / firefox- <versione>
    (o / usr / lib / firefox- <versione>)

    Mac: /Applications/Firefox.app

  3. Crea config-prefs.js nel blocco note:

    pref("general.config.obscure_value", 0);
    pref("general.config.filename", "config.js");
    
  4. Sposta config-prefs.js nella directory default \ pref di Firefox .
    (es. C: \ Programmi \ Mozilla Firefox \ default \ pref )

  5. Riavvia Firefox.

  6. Trascina l'XPI non firmato nella finestra di Firefox o utilizza l'opzione "Installa componente aggiuntivo da file", nelle impostazioni dei componenti aggiuntivi di Firefox.


Proveniente da questa fonte: https://forum.mozilla-russia.org/viewtopic.php?id=70326


Sfortunatamente questo metodo non sembra funzionare su FF 66.0.3 a 64 bit. Sarebbe estremamente necessario ora che Mozilla ha incasinato il GRANDE tempo.
CoolKoon

1

Apparentemente su Firefox 60 e versioni successive né il trucco xpinstall.signatures.requiredné il config.js delineati sopra funzionano (Mozilla, chiedi per favore!).

Il forum russo sopra citato apparentemente menziona una soluzione anche per queste versioni di Firefox. Quindi inseriscilo in config.js invece che poi salvi in C: \ Programmi \ 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);
}

Quindi devi aggiungerlo al file config-prefs.js salvato in C: \ Programmi \ Mozilla Firefox \ defaults \ pref

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

È stato testato per funzionare su FF 66.0.3. Sfortunatamente non riporterà magicamente i tuoi addon e temi, ma almeno riattiva l'opzione di reinstallarli. Meglio di tutto ciò che Mozilla ha da offrire comunque, poiché non sembrano preoccuparsene in particolare nonostante il fatto che i loro forum siano inondati di lamentele per questo problema.


Se vuoi davvero questo, non installare hack casuali, basta usare un Nightly dove la stringa di preferenze signatures.required è effettivamente abilitata.
Félix Saparelli,

1
E perché dovrei? Fino ad ora stavo bene usando quelle che pensavo fossero versioni stabili di FF in cui ho installato solo componenti aggiuntivi legittimi e genuini direttamente dal sito ufficiale dei componenti aggiuntivi di Firefox. E ora tutti questi addon (e temi, per l'amor di Dio!) Hanno smesso di funzionare all'improvviso. Mi dispiace ma invece di installare una versione potenzialmente ancora più rotta di FF preferisco qualcosa che faccia funzionare la mia installazione attuale.
CoolKoon

PS Gli addon hanno smesso di funzionare anche sulla versione Android di FF (v66.0.2) in esecuzione sul mio telefono, ma curiosamente xpinstall.signatures.requiredsembra che funzioni ancora lì.
CoolKoon
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.