จะบังคับให้ติดตั้งส่วนขยาย firefox ที่ไม่ผ่านการยืนยันใน 41.0b1 + ได้อย่างไร


15

การปรับปรุงใหม่ล่าสุดใน Firefox (41.0b1) อุกอาจบล็อกการติดตั้งส่วนขยายที่ไม่ได้ยืนยันคือHTTPS ทุกที่และความเป็นส่วนตัวของแบดเจอร์

ฉันจะบังคับให้ติดตั้งส่วนขยายเหล่านี้ได้อย่างไร มีการตั้งค่าภายในที่about:configฉันสามารถสลับชั่วคราวได้หรือไม่?

Mozilla เน้นการเปลี่ยนแปลงนี้กับ Firefox ที่นี่โดยไม่ต้องใช้ความพยายามก่อนหน้านี้ในการเทียบเคียงส่วนขยายที่เป็นอันตราย

คำตอบ:


19

ใช่มีการตั้งค่าในชื่อของมันคือAbout:config xpinstall.signatures.requiredดับเบิลคลิกที่ชื่อการตั้งค่าเพื่อให้ค่าถูกตั้งค่าเป็นเท็จ ตอนนี้คุณสามารถติดตั้งส่วนขยายที่ไม่ได้ลงชื่อใน Firefox ไม่จำเป็นต้องรีสตาร์ทเบราว์เซอร์


2
Fantastic! การแก้ไขนี้จะพอเพียงจนกว่า EFF และคนอื่น ๆ จะได้รับการยืนยันส่วนขยาย
วิตามินมี

1
สิ่งนี้จะไม่ทำงานหลังจากรุ่น 43+ :(
Suresh Atta

แม้จะมีหลายแหล่งกล่าวว่ามันใช้งานไม่ได้กับ FF ล่าสุด แต่มันทำงานได้ดีสำหรับฉันใน 48.0 บน Linux ฉันต้องเปิดหน้าแอดออนและลากไฟล์ xpi ไปที่นั่น
Guy บราซิลนั่น

@ThatBrazilianGato: ไม่ทำงานสำหรับฉันใน Win7 FF48.0 :(
glavić

4
นั่นสำหรับฉัน ลาก่อน Firefox รักคุณตั้งแต่รุ่น 0.6 :-( หวังจะมีวิธีแก้ปัญหาบางวัน.
andreas

2

ใน Firefox 48 ขึ้นไปวิธีนี้ใช้ไม่ได้ คุณควรสร้างไฟล์กำหนดค่าสองไฟล์ในไดเรกทอรี Firefox

  1. สร้างไฟล์config.jsใน notepad (ตรวจสอบว่านามสกุลไฟล์เป็น. 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- <version>
    (หรือ / usr / lib / firefox- <version>)

    Mac: /Applications/Firefox.app

  3. สร้างconfig-prefs.jsใน notepad:

    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 หรือใช้ตัวเลือก "ติดตั้ง Add-on จากไฟล์" ในการตั้งค่าของ Firefox Add-ons


มาจากแหล่งที่มานี้: https://forum.mozilla-russia.org/viewtopic.php?id=70326


น่าเสียดายที่วิธีนี้ดูเหมือนว่าจะใช้งานไม่ได้กับ FF 66.0.3 64-bit มันจะต้องใช้อย่างมากในขณะนี้ที่ 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 น่าเสียดายที่มันจะไม่นำ addons และธีมกลับมาอย่างน่าอัศจรรย์ แต่อย่างน้อยมันก็เปิดใช้งานตัวเลือกการติดตั้งใหม่อีกครั้ง ดีกว่าสิ่งอื่น ๆ ที่ Mozilla มีให้อยู่แล้วเนื่องจากพวกเขาดูเหมือนจะไม่สนใจเป็นพิเศษแม้ว่าข้อเท็จจริงที่ว่าฟอรัมของพวกเขาจะเต็มไปด้วยข้อร้องเรียนเกี่ยวกับปัญหานี้


ดูถ้าคุณต้องการสิ่งนี้จริงๆอย่าติดตั้งแฮ็คแบบสุ่มเพียงแค่ใช้ Nightly ที่เปิดใช้งานสตริงการกำหนดค่าตามความชอบลายเซ็นจริง ๆ
Félix Saparelli

1
แล้วทำไมฉันต้อง จนถึงตอนนี้ฉันใช้ได้ดีกับการใช้สิ่งที่ฉันคิดว่าเป็น FF เวอร์ชันที่เสถียรซึ่งฉันติดตั้งเพียง addons ที่ถูกต้องและเป็นของแท้โดยตรงจากเว็บไซต์ addon อย่างเป็นทางการของ Firefox และตอนนี้ addons เหล่านี้ทั้งหมด (และธีมเพื่อประโยชน์ของพระคริสต์!) ได้หยุดทำงานในทันที ฉันขอโทษ แต่แทนที่จะติดตั้ง FF เวอร์ชันที่อาจจะเสียมากกว่าฉันต้องการบางอย่างที่ทำให้การติดตั้งปัจจุบันของฉันทำงานแทน
CoolKoon

ป.ล. แอดออนหยุดทำงานกับ FF เวอร์ชัน Android (v66.0.2) ที่ใช้งานบนโทรศัพท์ของฉันเช่นกัน แต่ก็ยังอยากรู้อยากเห็นพอที่xpinstall.signatures.requiredจะใช้งานได้ที่นั่น
CoolKoon
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.