Bagaimana cara paksa memasang ekstensi firefox yang belum diverifikasi di 41.0b1 +?

15

Pembaruan terbaru untuk Firefox (41.0b1) secara agresif memblokir pemasangan ekstensi yang tidak terverifikasi, yaitu HTTPS Everywhere dan Privacy Badger .

Bagaimana saya bisa memaksa ekstensi ini untuk menginstal? Apakah ada pengaturan di dalam about:configsaya bisa beralih sementara?

Mozilla menyoroti perubahan ini ke Firefox di sini , mencatat upaya sebelumnya untuk tidak efisien dalam memperbaiki ekstensi berbahaya.

VitaminYa
sumber

Jawaban:

19

Ya, ada pengaturan di dalam About:config, namanya xpinstall.signatures.required. Klik dua kali pada nama preferensi sehingga nilainya diatur ke false. Sekarang Anda dapat menginstal ekstensi yang tidak ditandatangani di Firefox. Restart browser tidak diperlukan.

Suzana
sumber
2
Fantastis! Perbaikan ini akan cukup sampai EFF dan yang lainnya memiliki ekstensi yang diverifikasi.
VitaminYes
1
Ini juga tidak akan berfungsi setelah versi 43+. :(
Suresh Atta
Meskipun banyak sumber mengatakan itu tidak akan berfungsi di FF baru-baru ini, itu bekerja untuk saya di 48.0 di Linux. Saya harus membuka halaman addons dan menyeret file xpi di sana.
Orang Brazil itu,
@ThatBrazilianGato: tidak bekerja untuk saya di Win7 FF48.0 :(
glavić
4
Itu untuk saya. Sampai jumpa Firefox, mencintaimu sejak versi 0.6. :-( Semoga akan ada solusinya suatu hari nanti.
andreas
2

Di Firefox 48 ke atas, metode ini tidak berfungsi. Sebagai gantinya, Anda harus membuat dua file konfigurasi di dalam direktori Firefox.

  1. Buat file config.js di notepad (pastikan ekstensi file .js dan bukan .txt ):

    //
    try {
    Components.utils.import("resource://gre/modules/addons/XPIProvider.jsm", {})
    .eval("SIGNED_TYPES.clear()");
    }
    catch(ex) {}
    
  2. Pindahkan config.js ke direktori instalasi Firefox Anda:

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

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

    Mac: /Applications/Firefox.app

  3. Buat config-prefs.js di notepad:

    pref("general.config.obscure_value", 0);
    pref("general.config.filename", "config.js");
    
  4. Pindahkan config-prefs.js ke direktori Firefox default \ pref .
    (misalnya C: \ Program Files \ Mozilla Firefox \ defaults \ pref )

  5. Mulai ulang Firefox.

  6. Seret XPI yang tidak ditandatangani ke jendela Firefox, atau gunakan opsi "Install Add-on From File", di pengaturan Firefox Add-on.


Berasal dari sumber ini: https://forum.mozilla-russia.org/viewtopic.php?id=70326

Noam Manos
sumber
Sayangnya metode ini tampaknya tidak berfungsi pada FF 66.0.3 64-bit. Ini akan sangat dibutuhkan sekarang karena Mozilla telah mengacaukan waktu BESAR.
CoolKoon
1

Ternyata di Firefox 60 dan di atas tidak dengan xpinstall.signatures.requiredmaupun config.js trik yang diuraikan di atas karya (Mozilla, keel lebih silahkan!).

Forum Rusia yang direferensikan di atas rupanya menyebutkan solusi untuk versi Firefox ini juga. Jadi masukkan ini ke config.js yang kemudian Anda simpan ke 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);
}

Maka Anda harus menambahkan ini ke file config-prefs.js yang disimpan ke 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);

Telah diuji untuk bekerja pada FF 66.0.3. Sayangnya itu tidak akan mengembalikan addons dan tema Anda secara ajaib, tetapi setidaknya mengaktifkan kembali opsi untuk menginstalnya kembali. Lebih baik daripada apa pun yang ditawarkan Mozilla, karena mereka tampaknya tidak terlalu peduli terlepas dari kenyataan bahwa forum mereka dibanjiri dengan keluhan tentang masalah ini.

CoolKoon
sumber
Begini, jika Anda benar-benar menginginkan ini, jangan pasang peretasan acak, cukup gunakan Nightly di mana string preferensi tanda tangan. Diperlukan sebenarnya diaktifkan.
Félix Saparelli
1
Dan mengapa saya harus? Sampai sekarang saya benar-benar baik-baik saja dengan menggunakan apa yang saya pikir sebagai versi FF stabil di mana saya hanya menginstal addon yang sah dan asli langsung dari situs addon resmi Firefox. Dan sekarang semua addons ini (dan tema, demi Tuhan!) Telah berhenti bekerja tiba-tiba. Maaf, alih-alih menginstal FF yang berpotensi rusak, saya lebih suka sesuatu yang membuat instalasi saya saat ini bekerja.
CoolKoon
PS AddOns telah berhenti bekerja pada versi Android FF (v66.0.2) yang berjalan di ponsel saya juga, tapi anehnya xpinstall.signatures.requiredmasih berfungsi di sana.
CoolKoon