¿Cómo forzar la instalación de una extensión de Firefox no verificada en 41.0b1 +?


15

La última actualización de Firefox (41.0b1) bloquea agresivamente la instalación de extensiones no verificadas, a saber, HTTPS Everywhere y Privacy Badger .

¿Cómo podría forzar la instalación de estas extensiones? ¿Hay alguna configuración dentro about:configque pueda alternar temporalmente?

Mozilla destaca este cambio en Firefox aquí , y señala sus esfuerzos anteriores para ser ineficaz para acorralar extensiones maliciosas.

Respuestas:


19

Sí, hay una configuración en About:config, su nombre es xpinstall.signatures.required. Haga doble clic en el nombre de preferencia para que su valor se establezca en falso. Ahora puede instalar extensiones sin firmar en Firefox. No es necesario reiniciar el navegador.


2
¡Fantástico! Esta solución será suficiente hasta que EFF y otros tengan sus extensiones verificadas.
VitaminYes

1
Esto tampoco funcionará después de la versión 43+. :(
Suresh Atta

A pesar de que muchas fuentes dicen que no funcionará en FF reciente, funcionó para mí en 48.0 en Linux. Tuve que abrir la página de complementos y arrastrar el archivo xpi allí.
Ese tipo brasileño

@ThatBrazilianGato: no está funcionando para mí en Win7 FF48.0 :(
glavić

44
Eso es todo por mi. Adiós Firefox, te amé desde la versión 0.6. :-( Espero que haya una solución algún día.
andreas

2

En Firefox 48 y superior, este método no funciona. En su lugar, debe crear dos archivos de configuración dentro del directorio de Firefox.

  1. Cree el archivo config.js en el bloc de notas (asegúrese de que la extensión del archivo sea .js y no .txt ):

    //
    try {
    Components.utils.import("resource://gre/modules/addons/XPIProvider.jsm", {})
    .eval("SIGNED_TYPES.clear()");
    }
    catch(ex) {}
    
  2. Mueva config.js a su directorio de instalación de Firefox:

    Windows: C: \ Archivos de programa \ Mozilla Firefox
    (o C: \ Archivos de programa (x86) \ Mozilla Firefox )

    Linux: / usr / lib64 / firefox- <versión>
    (o / usr / lib / firefox- <versión>)

    Mac: /Aplicaciones/Firefox.app

  3. Cree config-prefs.js en el bloc de notas:

    pref("general.config.obscure_value", 0);
    pref("general.config.filename", "config.js");
    
  4. Mueva config-prefs.js al directorio predeterminado de Firefox \ pref .
    (por ejemplo, C: \ Archivos de programa \ Mozilla Firefox \ defaults \ pref )

  5. Reinicia Firefox.

  6. Arrastre el XPI sin firmar a la ventana de Firefox, o use la opción "Instalar complemento desde archivo", en la configuración de Complementos de Firefox.


Originar de esta fuente: https://forum.mozilla-russia.org/viewtopic.php?id=70326


Desafortunadamente, este método no parece funcionar en FF 66.0.3 de 64 bits. Sería muy necesario ahora que Mozilla ha perdido mucho tiempo.
CoolKoon

1

Aparentemente, en Firefox 60 y superior, ni el truco xpinstall.signatures.requiredni el config.js descritos anteriormente funcionan (Mozilla, ¡no te rindas por favor!).

El foro ruso al que se hace referencia anteriormente aparentemente menciona una solución para estas versiones de Firefox también. Así que pon esto en config.js en lugar de guardarlo en C: \ Archivos de programa \ 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);
}

Luego debe agregar esto al archivo config-prefs.js guardado en C: \ Archivos de programa \ Mozilla Firefox \ defaults \ pref

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

Ha sido probado para funcionar en FF 66.0.3. Desafortunadamente, no traerá mágicamente sus complementos y temas, pero al menos vuelve a habilitar la opción de reinstalarlos. Mejor que nada, Mozilla tiene para ofrecer de todos modos, ya que no parece que les importe especialmente a pesar del hecho de que sus foros están inundados de quejas sobre este problema.


Mire, si realmente quiere esto, no instale hacks aleatorios, solo use un Nightly donde la cadena de preferencia signatures.required esté realmente habilitada.
Félix Saparelli

1
¿Y por qué debería hacerlo? Hasta ahora estaba completamente bien con el uso de lo que pensé que eran versiones estables de FF donde solo instalaba complementos legítimos y genuinos directamente desde el sitio oficial de complementos de Firefox. Y ahora todos estos complementos (¡y temas, por el amor de Dios!) Han dejado de funcionar de repente. Lo siento, pero en lugar de instalar una versión potencialmente más dañada de FF, prefiero algo que haga funcionar mi instalación actual.
CoolKoon

PD: Los complementos han dejado de funcionar en la versión de Android de FF (v66.0.2) que también se ejecuta en mi teléfono, pero curiosamente xpinstall.signatures.requiredtodavía parece funcionar allí.
CoolKoon
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.