Как принудительно установить непроверенное расширение firefox в 41.0b1 +?


15

Последнее обновление Firefox (41.0b1) агрессивно блокирует установку непроверенных расширений, а именно HTTPS Everywhere и Privacy Badger .

Как я могу заставить эти расширения установить? Есть ли настройка внутри, которую about:configя мог бы временно переключить?

Mozilla подчеркивает это изменение в Firefox здесь , отмечая его предыдущие попытки неэффективного компиляции вредоносных расширений.

Ответы:


19

Да, есть настройка About:config, ее имя есть xpinstall.signatures.required. Дважды щелкните имя предпочтения, чтобы установить для него значение false. Теперь вы можете устанавливать неподписанные расширения в Firefox. Перезапуск браузера не требуется.


2
Фантастический! Этого исправления будет достаточно, пока EFF и другие не проверят расширения.
VitaminYes

1
Это также не будет работать после версии 43+. :(
Суреш Атта

Несмотря на то, что многие источники сообщают, что в недавнем FF это не сработает, у меня это работало в 48.0 на Linux. Мне пришлось открыть страницу аддонов и перетащить туда файл xpi.
Этот бразильский парень

@ThatBrazilianGato: у меня не работает на Win7 FF48.0 :(
glavić

4
Это для меня. Пока Firefox, любил тебя с версии 0.6. :-( Надеюсь, что когда-нибудь будет обходной путь.
andreas

2

На Firefox 48 и выше этот метод не работает. Вместо этого вы должны создать два конфигурационных файла в каталоге Firefox.

  1. Создайте файл config.js в блокноте (убедитесь, что расширение файла .js, а не .txt ):

    //
    try {
    Components.utils.import("resource://gre/modules/addons/XPIProvider.jsm", {})
    .eval("SIGNED_TYPES.clear()");
    }
    catch(ex) {}
    
  2. Переместите файл config.js в каталог установки Firefox:

    Windows: C: \ Program Files \ Mozilla Firefox
    (или C: \ Program Files (x86) \ Mozilla Firefox )

    Linux: / usr / lib64 / firefox- <версия>
    (или / usr / lib / firefox- <версия>)

    Mac: /Applications/Firefox.app

  3. Создайте config-prefs.js в блокноте:

    pref("general.config.obscure_value", 0);
    pref("general.config.filename", "config.js");
    
  4. Переместите config-prefs.js в каталог Firefox по умолчанию \ pref .
    (например, C: \ Program Files \ Mozilla Firefox \ defaults \ pref )

  5. Перезапустите Firefox.

  6. Перетащите неподписанный XPI в окно Firefox или используйте параметр «Установить надстройку из файла» в настройках надстроек Firefox.


Происходит из этого источника: https://forum.mozilla-russia.org/viewtopic.php?id=70326


К сожалению, этот метод не работает на 64-битной FF 66.0.3. Это было бы крайне необходимо сейчас, когда Мозилла испортила ОГРОМНОЕ время.
CoolKoon

1

По-видимому, в Firefox 60 и более поздних версияхxpinstall.signatures.required ни трюк ни config.js, описанный выше, не работает (Mozilla, опрокините , пожалуйста!).

Российский форум, на который есть ссылки выше, по-видимому, упоминает решение и для этих версий Firefox. Вместо этого поместите это в config.js, который затем сохраните в 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);
}

Затем вы должны добавить это в файл config-prefs.js, сохраненный в 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);

Он был протестирован для работы на FF 66.0.3. К сожалению, он не вернет ваши аддоны и темы магическим образом, но, по крайней мере, он снова включит возможность их переустановки. Лучше всего Mozilla может предложить в любом случае, так как они, кажется, не особенно заботятся, несмотря на то, что их форумы наводнены жалобами по этой проблеме.


Послушайте, если вы действительно этого хотите, не устанавливайте случайные хаки, просто используйте Nightly, где строка предпочтений signatures.required фактически включена.
Феликс Сапарелли

1
А зачем мне? До сих пор у меня было все в порядке с использованием, как мне казалось, стабильных версий FF, где я устанавливал только подлинные и подлинные дополнения прямо с официального сайта дополнений Firefox. И теперь все эти дополнения (и темы, ради всего святого!) Внезапно перестали работать. Извините, но вместо того, чтобы устанавливать потенциально еще более испорченную версию FF, я предпочитаю что-то, что заставляет мою текущую установку работать.
CoolKoon

PS Аддоны перестали работать на Android-версии FF (v66.0.2), работающей и на моем телефоне, но, как ни странно, xpinstall.signatures.requiredвсе же, похоже, все еще работает там.
CoolKoon
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.