Як змусити встановити неперевірене розширення firefox у 41.0b1 +?


15

Останнє оновлення Firefox (41.0b1) агресивно блокує встановлення неперевірених розширень, а саме HTTPS Everywhere та Badger Privacy .

Як я можу змусити встановити ці розширення? Чи є налаштування всередині about:configя можу тимчасово переключити?

Mozilla підкреслює цю зміну для Firefox тут , відзначаючи, що її попередні зусилля були неефективними щодо боротьби зі зловмисними розширеннями.

Відповіді:


19

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


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

1
Це також не працюватиме після версії 43+. :(
Суреш Атта

Незважаючи на те, що багато джерел говорять, що він не працюватиме в останній FF, він працював для мене в 48.0 на Linux. Мені довелося відкрити сторінку addons і перетягнути туди файл xpi.
Той бразильський хлопець

@ThatBrazilianGato: не працює для мене на Win7 FF48.0 :(
glavić

4
Це для мене. До побачення Firefox, любив вас з версії 0.6. :-( Сподіваюся, якийсь день буде
вирішено

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: \ програмні файли \ Mozilla Firefox
    (або C: \ програмні файли (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. Це було б дуже потрібно зараз, коли Mozilla заплутав ВЕЛИКИЙ час.
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, де фактично ввімкнено рядок підписів.
Фелікс Сапареллі

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.