Jak wymusić instalację niezweryfikowanego rozszerzenia Firefoksa w 41.0b1 +?

15

Najnowsza aktualizacja przeglądarki Firefox (41.0b1) agresywnie blokuje instalację niezweryfikowanych rozszerzeń, a mianowicie HTTPS Everywhere i Privacy Badger .

Jak mogę wymusić instalację tych rozszerzeń? Czy jest jakieś ustawienie, about:configktóre mógłbym tymczasowo przełączyć?

Mozilla podkreśla tę zmianę Firefox tutaj , zauważając swoje wcześniejsze wysiłki, aby być nieefektywne w corralling złośliwe rozszerzenia.

Witamina Tak
źródło

Odpowiedzi:

19

Tak, jest ustawienie About:config, jego nazwa to xpinstall.signatures.required. Kliknij dwukrotnie nazwę preferencji, aby jej wartość została ustawiona na false. Teraz możesz zainstalować niepodpisane rozszerzenia w Firefoksie. Ponowne uruchomienie przeglądarki nie jest konieczne.

Suzana
źródło
2
Fantastyczny! Ta poprawka wystarczy, aż EFF i inni zweryfikują rozszerzenia tam.
Witamina: Tak,
1
To również nie zadziała po wersji 43+. :(
Suresh Atta
Pomimo wielu źródeł, które mówią, że nie będzie działać w ostatnim FF, działało dla mnie w wersji 48.0 w systemie Linux. Musiałem otworzyć stronę dodatków i przeciągnąć tam plik xpi.
Ten Brazylijczyk
@ThatBrazilianGato: nie działa dla mnie na Win7 FF48.0 :(
glavić 16.08.16
4
To tyle dla mnie. Cześć Firefox, kocham cię od wersji 0.6. :-( Mam nadzieję, że któregoś dnia nastąpi obejście tego problemu.
Andre
2

W przeglądarce Firefox 48 i nowszych ta metoda nie działa. Zamiast tego powinieneś utworzyć dwa pliki konfiguracyjne w katalogu Firefox.

  1. Utwórz plik config.js w notatniku (upewnij się, że rozszerzenie pliku to .js, a nie .txt ):

    //
    try {
    Components.utils.import("resource://gre/modules/addons/XPIProvider.jsm", {})
    .eval("SIGNED_TYPES.clear()");
    }
    catch(ex) {}
    
  2. Przenieś config.js do katalogu instalacyjnego Firefoksa:

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

    Linux: / usr / lib64 / firefox- <wersja>
    (lub / usr / lib / firefox- <wersja>)

    Mac: /Applications/Firefox.app

  3. Utwórz config-prefs.js w notatniku:

    pref("general.config.obscure_value", 0);
    pref("general.config.filename", "config.js");
    
  4. Przenieś config-prefs.js do katalogu defaults \ pref Firefoksa .
    (np. C: \ Program Files \ Mozilla Firefox \ defaults \ pref )

  5. Uruchom ponownie Firefox.

  6. Przeciągnij niepodpisany XPI do okna Firefox lub użyj opcji „Zainstaluj dodatek z pliku” w ustawieniach dodatków Firefox.


Pochodzą z tego źródła: https://forum.mozilla-russia.org/viewtopic.php?id=70326

Noam Manos
źródło
Niestety ta metoda nie działa na 64-bitowym FF 66.0.3. Byłoby to bardzo potrzebne teraz, gdy Mozilla pomieszała WIELKI czas.
CoolKoon
1

Widocznie na Firefoksie 60 i powyżej ani xpinstall.signatures.requiredani config.js trik opisany powyżej prac (Mozilla, kila nad proszę!).

Wspomniane powyżej rosyjskie forum najwyraźniej wymienia również rozwiązanie dla tych wersji Firefoksa. Zamiast tego umieść to w config.js, który następnie zapisz w 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);
}

Następnie musisz dodać to do pliku config-prefs.js zapisanego w 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);

Został przetestowany do pracy na FF 66.0.3. Niestety nie przywróci magicznie dodatków i motywów, ale przynajmniej ponownie włącza opcję ich ponownej instalacji. I tak jest lepsze niż cokolwiek, co Mozilla ma do zaoferowania, ponieważ wydaje się, że nie obchodzi ich to szczególnie pomimo faktu, że ich fora są zalewane skargami na ten problem.

CoolKoon
źródło
Spójrz, jeśli naprawdę tego chcesz, nie instaluj losowych hacków, po prostu użyj opcji Nightly, w której łańcuch preferencji podpisów.wymagany jest faktycznie włączony.
Félix Saparelli
1
A dlaczego mam? Do tej pory nie miałem problemów z używaniem stabilnych wersji FF, w których instalowałem tylko legalne i oryginalne dodatki prosto z oficjalnej strony dodatków Firefoksa. A teraz wszystkie te dodatki (i motywy, na miłość boską!) Nagle przestały działać. Przykro mi, ale zamiast instalować potencjalnie jeszcze bardziej zepsutą wersję FF, wolę coś, co sprawia, że ​​moja obecna instalacja działa.
CoolKoon
PS Dodatki przestały działać również w wersji FF (v66.0.2) na Androida działającej na moim telefonie, ale co ciekawe, xpinstall.signatures.requiredwydaje się, że nadal tam działa.
CoolKoon