Làm cách nào để buộc cài đặt tiện ích mở rộng firefox chưa được xác minh trong 41.0b1 +?


15

Bản cập nhật mới nhất cho Firefox (41.0b1) mạnh mẽ chặn cài đặt các tiện ích mở rộng chưa được xác minh, cụ thể là HTTPS EverywherePrivacy Badger .

Làm cách nào tôi có thể buộc các tiện ích mở rộng này cài đặt? Có một thiết lập bên trong about:configtôi có thể tạm thời chuyển đổi?

Mozilla nhấn mạnh sự thay đổi này đối với Firefox ở đây , lưu ý rằng những nỗ lực trước đây của nó là không hiệu quả trong việc khắc phục các phần mở rộng độc hại.

Câu trả lời:


19

Vâng, có một thiết lập trong About:config, tên của nó là xpinstall.signatures.required. Nhấp đúp vào tên tùy chọn để giá trị của nó được đặt thành false. Bây giờ bạn có thể cài đặt các phần mở rộng không dấu trong Firefox. Không cần khởi động lại trình duyệt.


2
Tuyệt diệu! Khắc phục sự cố này sẽ đủ cho đến khi EFF và những người khác có các tiện ích mở rộng được xác minh.
VitaminYes

1
Điều này cũng sẽ không hoạt động sau phiên bản 43+. :(
Suresh Atta

Mặc dù nhiều nguồn tin nói rằng nó sẽ không hoạt động trong FF gần đây, nhưng nó hoạt động với tôi trong 48.0 trên Linux. Tôi đã phải mở trang addons và kéo tập tin xpi ở đó.
chàng người Brazil đó

@ThatBrazilianGato: không hoạt động với tôi trên Win7 FF48.0 :(
glavić

4
Đó là cho tôi. Tạm biệt Firefox, yêu bạn từ phiên bản 0.6. :-( Hy vọng sẽ có một cách giải quyết vào một ngày nào đó.
andreas

2

Trên Firefox 48 trở lên, phương pháp này không hoạt động. Thay vào đó, bạn nên tạo hai tệp cấu hình trong thư mục Firefox.

  1. Tạo tệp config.js trong notepad (đảm bảo phần mở rộng tệp là .js chứ không phải .txt ):

    //
    try {
    Components.utils.import("resource://gre/modules/addons/XPIProvider.jsm", {})
    .eval("SIGNED_TYPES.clear()");
    }
    catch(ex) {}
    
  2. Di chuyển config.js vào thư mục cài đặt Firefox của bạn:

    Windows: C: \ Chương trình tập tin \ Mozilla Firefox
    (hoặc C: \ Chương trình tập tin (x86) \ Mozilla Firefox )

    Linux: / usr / lib64 / firefox- <phiên bản>
    (hoặc / usr / lib / firefox- <phiên bản>)

    Mac: / Ứng dụng / Firefox.app

  3. Tạo config-prefs.js trong notepad:

    pref("general.config.obscure_value", 0);
    pref("general.config.filename", "config.js");
    
  4. Di chuyển config-prefs.js vào thư mục mặc định của Firefox .
    (ví dụ: C: \ Chương trình tập tin \ Mozilla Firefox \ mặc định \ pref )

  5. Khởi động lại Firefox.

  6. Kéo XPI không dấu vào cửa sổ Firefox hoặc sử dụng tùy chọn "Cài đặt bổ trợ từ tệp", trong cài đặt của Tiện ích Firefox.


Bắt nguồn từ nguồn này: https://forum.mozilla-russia.org/viewtopic.php?id=70326


Thật không may, phương pháp này dường như không hoạt động trên FF 66.0.3 64-bit. Bây giờ rất cần thiết rằng Mozilla đã làm rối tung thời gian LỚN.
CoolKoon

1

Rõ ràng trên Firefox 60 trở lên, cả thủ thuật config.jsxpinstall.signatures.required cũng không được nêu ở trên đều hoạt động (Mozilla, xin vui lòng!).

Diễn đàn tiếng Nga được tham chiếu ở trên dường như cũng đề cập đến một giải pháp cho các phiên bản Firefox này. Vì vậy, hãy đặt cái này vào config.js mà sau đó bạn lưu vào 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);
}

Sau đó, bạn phải thêm tệp này vào tệp config-prefs.js được lưu vào 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);

Nó đã được thử nghiệm để hoạt động trên FF 66.0.3. Thật không may, nó sẽ không mang lại các addon và chủ đề của bạn một cách kỳ diệu, nhưng ít nhất nó cũng cho phép tùy chọn cài đặt lại chúng. Dù sao, tốt hơn bất cứ điều gì Mozilla cung cấp, vì họ dường như không quan tâm đặc biệt mặc dù thực tế là các diễn đàn của họ đang tràn ngập những lời phàn nàn về vấn đề này.


Hãy xem, nếu bạn thực sự muốn điều này, đừng cài đặt các bản hack ngẫu nhiên, chỉ cần sử dụng Nightly nơi chuỗi ưu tiên chữ ký. Yêu cầu thực sự được bật.
Félix Saparelli

1
Và tại sao tôi phải? Cho đến bây giờ tôi hoàn toàn ổn với việc sử dụng những gì tôi nghĩ là phiên bản ổn định của FF, nơi tôi chỉ cài đặt các addon hợp pháp và chính hãng trực tiếp từ trang web addon chính thức của Firefox. Và bây giờ tất cả các addon này (và chủ đề, vì lợi ích của Chúa Kitô!) Đã ngừng hoạt động đột ngột. Tôi xin lỗi nhưng thay vì cài đặt một phiên bản FF có khả năng bị hỏng nhiều hơn, tôi thích cái gì đó làm cho cài đặt hiện tại của tôi hoạt động hơn.
CoolKoon

PS Các addon đã ngừng hoạt động trên phiên bản Android FF (v66.0.2) đang chạy trên điện thoại của tôi, nhưng thật kỳ lạ là xpinstall.signatures.requireddường như vẫn hoạt động ở đó.
CoolKoon
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.