web-dev-qa-db-fra.com

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

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 pourrais-je être capable de forcer l'installation de ces extensions? Existe-t-il un paramètre dans about:config que je pourrais temporairement basculer?

Mozilla met en évidence ce changement dans Firefox ici , notant ses efforts antérieurs pour être inefficaces à corraller les extensions malveillantes.

15
VitaminYes

Oui, il existe un paramètre dans About:config, son nom est xpinstall.signatures.required. Double-cliquez sur le nom de la préférence afin 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.

19
Suzana

Sur Firefox 48 et supérieur, cette méthode ne fonctionne pas. Au lieu de cela, vous devriez 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 dans votre répertoire d'installation de Firefox:

    Windows: C:\Program Files\Mozilla Firefox
    (ou C:\Fichiers de programme (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 le répertoire config-prefs.js dans le répertoire par défaut de Firefox \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 de 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

2
Noam Manos

Apparemment, sur Firefox 60 et supérieur, ni le xpinstall.signatures.required, ni le truc config.js décrit ci-dessus ne fonctionne (Mozilla, keel over please!).

Le forum russe référencé ci-dessus mentionne apparemment une solution pour ces versions de Firefox également. Donc mettez ceci dans config.js à la place que vous sauvegarderez 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 ajouter ceci 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, il ne ramènera pas vos addons et vos thèmes comme par magie, mais au moins, il réactive l'option de les réinstaller. Quoi qu'il en soit, Mieux que tout ce que Mozilla a à offrir, ils ne semblent pas particulièrement attentifs, en dépit du fait que leurs forums sont inondés de plaintes concernant ce problème.

1
CoolKoon