Comment forcer l'installation d'une extension Firefox non vérifiée dans 41.0b1 +?


15

La dernière mise à jour de Firefox (41.0b1) bloque de manière agressive l'installation d'extensions non vérifiées, à savoir HTTPS Everywhere et Privacy Badger .

Comment puis-je être en mesure de forcer l'installation de ces extensions? Y a-t-il un paramètre à l'intérieur que about:configje pourrais basculer temporairement?

Mozilla met en évidence ce changement de Firefox ici , notant ses efforts antérieurs pour être inefficace pour lutter contre les extensions malveillantes.

Réponses:


19

Oui, il y a un paramètre About:config, son nom est xpinstall.signatures.required. Double-cliquez sur le nom de la préférence pour que sa valeur soit définie sur false. Vous pouvez maintenant installer des extensions non signées dans Firefox. Un redémarrage du navigateur n'est pas nécessaire.


2
Fantastique! Cette correction suffira jusqu'à ce qu'EFF et d'autres aient vérifié les extensions.
VitaminYes

1
Cela ne fonctionnera pas non plus après la version 43+. :(
Suresh Atta

Malgré de nombreuses sources disant que cela ne fonctionnera pas dans FF récent, cela a fonctionné pour moi dans 48.0 sur Linux. J'ai dû ouvrir la page des addons et y faire glisser le fichier xpi.
Ce brésilien Guy

@ThatBrazilianGato: ne fonctionne pas pour moi sur Win7 FF48.0 :(
glavić

4
C'est tout pour moi. Au revoir Firefox, vous aimait depuis la version 0.6. :-( J'espère qu'il y aura une solution de contournement un jour.
andreas

2

Sur Firefox 48 et supérieur, cette méthode ne fonctionne pas. Au lieu de cela, vous devez créer deux fichiers de configuration dans le répertoire Firefox.

  1. Créez le fichier config.js dans le bloc-notes (assurez-vous que l'extension du fichier est .js et non .txt ):

    //
    try {
    Components.utils.import("resource://gre/modules/addons/XPIProvider.jsm", {})
    .eval("SIGNED_TYPES.clear()");
    }
    catch(ex) {}
    
  2. Déplacez config.js vers votre répertoire d'installation de Firefox:

    Windows: C: \ Program Files \ Mozilla Firefox
    (ou C: \ Program Files (x86) \ Mozilla Firefox )

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

    Mac: /Applications/Firefox.app

  3. Créez config-prefs.js dans le bloc-notes:

    pref("general.config.obscure_value", 0);
    pref("general.config.filename", "config.js");
    
  4. Déplacez config-prefs.js dans le répertoire Firefox defaults \ pref .
    (par exemple C: \ Program Files \ Mozilla Firefox \ defaults \ pref )

  5. Redémarrez Firefox.

  6. Faites glisser le XPI non signé dans la fenêtre Firefox, ou utilisez l'option "Installer le module complémentaire à partir du fichier", dans les paramètres des modules complémentaires de Firefox.


Proviennent de cette source: https://forum.mozilla-russia.org/viewtopic.php?id=70326


Malheureusement, cette méthode ne semble pas fonctionner sur FF 66.0.3 64 bits. Il serait grandement nécessaire maintenant que Mozilla a foiré BIG time.
CoolKoon

1

Apparemment sur Firefox 60 et au- dessus ni la xpinstall.signatures.requiredni la config.js astuce décrite ci - dessus fonctionne (Mozilla, sur la quille s'il vous plaît!).

Le forum russe mentionné ci-dessus mentionne apparemment également une solution pour ces versions de Firefox. Donc, placez-le dans config.js à la place que vous enregistrez ensuite dans 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);
}

Ensuite, vous devez l'ajouter au fichier config-prefs.js enregistré dans C: \ Program Files \ Mozilla Firefox \ defaults \ pref

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

Il a été testé pour fonctionner sur FF 66.0.3. Malheureusement, cela ne ramènera pas vos extensions et thèmes comme par magie, mais au moins, il réactivera l'option de les réinstaller. Mieux que tout ce que Mozilla a à offrir de toute façon, car ils ne semblent pas s'en soucier particulièrement malgré le fait que leurs forums soient inondés de plaintes concernant ce problème.


Regardez, si vous le voulez vraiment, n'installez pas de hacks aléatoires, utilisez simplement un Nightly où la chaîne de préférence signatures.required est réellement activée.
Félix Saparelli

1
Et pourquoi devrais-je? Jusqu'à présent, j'étais complètement d'accord avec l'utilisation de ce que je pensais être des versions stables de FF où je n'installais que des addons légitimes et authentiques directement depuis le site officiel des addons de Firefox. Et maintenant, tous ces addons (et thèmes, pour l'amour du Christ!) Ont cessé de fonctionner tout d'un coup. Je suis désolé mais au lieu d'installer une version potentiellement plus cassée de FF, je préfère quelque chose qui fait que mon installation actuelle fonctionne à la place.
CoolKoon

PS Les addons ont cessé de fonctionner sur la version Android de FF (v66.0.2) fonctionnant également sur mon téléphone, mais curieusement, cela xpinstall.signatures.requiredsemble toujours fonctionner là-bas.
CoolKoon
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.