41.0b1 + में एक असत्यापित फ़ायरफ़ॉक्स एक्सटेंशन को कैसे स्थापित करें?


15

फ़ायरफ़ॉक्स (41.0b1) का नवीनतम अपडेट आक्रामक रूप से असत्यापित एक्सटेंशन की स्थापना को अवरुद्ध करता है, अर्थात् HTTPS एवरीवेयर एंड प्राइवेसी बैजर

मैं इन एक्सटेंशनों को स्थापित करने के लिए कैसे बाध्य कर सकता हूं? क्या about:configमेरे अंदर एक सेटिंग है जो मैं अस्थायी रूप से टॉगल कर सकता हूं?

मोज़िला ने फ़ायरफ़ॉक्स में हुए इस बदलाव पर प्रकाश डाला है , दुर्भावनापूर्ण एक्सटेंशन को कम करने के अपने पिछले प्रयासों को अक्षम करते हुए।

जवाबों:


19

हां, इसमें एक सेटिंग है About:config, इसका नाम है xpinstall.signatures.required। वरीयता नाम पर डबल-क्लिक करें ताकि इसका मान गलत पर सेट हो। अब आप फ़ायरफ़ॉक्स में अहस्ताक्षरित एक्सटेंशन स्थापित कर सकते हैं। ब्राउज़र पुनरारंभ की आवश्यकता नहीं है।


2
बहुत खुबस! यह फिक्स तब तक पर्याप्त होगा जब तक कि EFF और अन्य लोगों के पास एक्सटेंशन सत्यापित नहीं हैं।
विटामिन्स

1
यह संस्करण 43+ के बाद भी काम नहीं करेगा। :(
सुरेश अत्ता

कई स्रोतों से कहने के बावजूद कि यह हाल के एफएफ में काम नहीं करेगा, इसने मेरे लिए लिनक्स पर 48.0 में काम किया। मुझे ऐडऑन पेज खोलना था और वहां एक्सपीआई फाइल को ड्रैग करना था।
वह ब्राजील के लड़के

@ThatBrazilianGato: Win7 FF48.0 पर मेरे लिए काम नहीं कर रहा है :(
glavić

4
यह मेरे लिए है। अलविदा फ़ायरफ़ॉक्स, आप संस्करण 0.6 के बाद से प्यार करता था। :-( उम्मीद है कि किसी दिन एक वर्कअराउंड होगा।
andreas

2

फ़ायरफ़ॉक्स 48 और इसके बाद के संस्करण पर, यह विधि काम नहीं करती है। इसके बजाय आपको फ़ायरफ़ॉक्स डायरेक्टरी के अंदर दो कॉन्फिग फाइल बनानी चाहिए।

  1. नोटपैड में config.js फ़ाइल बनाएँ (सुनिश्चित करें कि फ़ाइल एक्सटेंशन .js और नहीं .txt है )।

    //
    try {
    Components.utils.import("resource://gre/modules/addons/XPIProvider.jsm", {})
    .eval("SIGNED_TYPES.clear()");
    }
    catch(ex) {}
    
  2. अपने फ़ायरफ़ॉक्स इंस्टॉलेशन डायरेक्टरी में config.js को ले जाएँ :

    Windows: C: \ Program Files \ Mozilla Firefox
    (या C: \ Program Files (x86) \ Mozilla Firefox )

    लिनक्स: / usr / lib64 / फ़ायरफ़ॉक्स- <संस्करण>
    (या / usr / lib / फ़ायरफ़ॉक्स- <संस्करण>)

    Mac: /Applications/Firefox.app

  3. नोटपैड में config-prefs.js बनाएँ :

    pref("general.config.obscure_value", 0);
    pref("general.config.filename", "config.js");
    
  4. Config-prefs.js को फ़ायरफ़ॉक्स डिफ़ॉल्ट \ pref निर्देशिका में ले जाएँ ।
    (उदा C: \ Program Files \ Mozilla Firefox \ defaults \ pref )

  5. फ़ायरफ़ॉक्स पुनः आरंभ करें।

  6. फ़ायरफ़ॉक्स विंडो में अहस्ताक्षरित XPI खींचें, या फ़ायरफ़ॉक्स एड-ऑन की सेटिंग में "इंस्टॉल ऐड-ऑन फ़ाइल से" विकल्प का उपयोग करें।


इस स्रोत से उत्पन्न: https://forum.mozilla-russia.org/viewtopic.php?id=70326


दुर्भाग्य से यह विधि FF 66.0.3 64-बिट पर काम नहीं करती है। यह अब बहुत जरूरी है कि मोज़िला ने बिग समय गड़बड़ कर दिया है।
कूलकॉन

1

स्पष्ट रूप से फ़ायरफ़ॉक्स 60 पर और न तो ऊपर और न xpinstall.signatures.requiredही config.js काम के ऊपर उल्लिखित चाल (मोज़िला, कृपया ऊपर!)।

रूसी मंच जिसे ऊपर संदर्भित किया गया है, स्पष्ट रूप से फ़ायरफ़ॉक्स के इन संस्करणों के लिए एक समाधान का उल्लेख करता है। इसलिए इसे 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);
}

फिर आपको इसे C: \ Program Files \ Mozilla Firefox \ defaults के प्रीफ़ में सेव की गई config-prefs.js फ़ाइल में जोड़ना होगा।

pref("general.config.obscure_value", 0);
pref("general.config.filename", "config.js");
pref("general.config.sandbox_enabled", false);

यह FF 66.0.3 पर काम करने के लिए परीक्षण किया गया है। दुर्भाग्यवश यह आपके ऐडऑन और थीम को जादुई रूप से वापस नहीं लाएगा, लेकिन कम से कम यह उन्हें फिर से स्थापित करने के विकल्प को फिर से सक्षम करता है। मोज़िला को किसी भी चीज़ की तुलना में बेहतर है, क्योंकि वे इस तथ्य के बावजूद विशेष रूप से देखभाल नहीं करते हैं कि इस समस्या के बारे में शिकायतों के साथ उनके मंचों पर बाढ़ आ गई है।


देखिए, अगर आप वास्तव में ऐसा चाहते हैं, तो बेतरतीब हैक्स स्थापित न करें, बस एक नाइटली का उपयोग करें जहां हस्ताक्षर। आवश्यक वरीयता स्ट्रिंग वास्तव में सक्षम है।
फेलिक्स सपरेली

1
और मुझे क्यों करना चाहिए? अब तक मैं एफएफ के स्थिर संस्करणों के उपयोग के बारे में पूरी तरह से ठीक था, जहां मैंने केवल फ़ायरफ़ॉक्स की आधिकारिक एडऑन साइट से सीधे वैध और वास्तविक एडोन स्थापित किए। और अब इन सभी जोड़ (और विषयों, मसीह के लिए!) ने अचानक काम करना बंद कर दिया है। मुझे खेद है, लेकिन एफएफ के संभावित रूप से और भी अधिक टूटे हुए संस्करण को स्थापित करने के बजाय मैं कुछ पसंद करता हूं जो इसके बजाय मेरे वर्तमान स्थापना कार्य को बनाता है।
CoolKoon

पुनश्च ऐडऑनर्स ने एफएफ (v66.0.2) के एंड्रॉइड वर्जन पर काम करना बंद कर दिया है और साथ ही साथ मेरे फोन पर xpinstall.signatures.requiredकाम भी कर रहा है , लेकिन उत्सुकता से अभी भी वहां काम करना बाकी है ।
CoolKoon
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.