如何禁用Firefox附加组件的签名检查?

时间:2015-08-11 22:01:29

标签: javascript firefox firefox-addon signing add-on

自版本42以来,Firefox默认拒绝安装未签名的附加组件。如何禁用此验证?

6 个答案:

答案 0 :(得分:35)

只能在NightlyDeveloper频道中禁用插件验证。换句话说,在Beta版本和标准版本中

  1. 转到about:config(将其输入地址栏)
  2. xpinstall.signatures.required设为false
  3. 更多https://wiki.mozilla.org/Addons/Extension_Signing

答案 1 :(得分:5)

要完成上述答案,我发现firefox-autoconfig,其中包括在 autoconfig.js <FIREFOX INSTALLATION DIR>/default/prefs文件中安装ci.clg文件 <FIREFOX INSTALLATION DIR> 这是在Firefox打开时(使用Firefox 45.0.1测试)确定并自动禁用xpinstall.signatures.required(以及其他选项)的方法

您会在 autoconfig.js

中看到这些内容
//
pref("general.config.filename", "ci.cfg");
pref("general.config.obscure_value", 0);

ci.cfg 中的内容:

// Disable checking if firefox is default browser
lockPref('browser.shell.checkDefaultBrowser', false);

// Disable restoring session
lockPref('browser.sessionstore.resume_from_crash', false);

// Disable extension signature check
lockPref('xpinstall.signatures.required', false);

// Allow extensions to be installed without user prompt
pref("extensions.autoDisableScopes", 0);
pref("extensions.enabledScopes", 15);

// Disable updater
lockPref("app.update.enabled", false);
// make absolutely sure it is really off
lockPref("app.update.auto", false);
lockPref("app.update.mode", 0);
lockPref("app.update.service.enabled", false);

// Prevent closing dialogs
lockPref("browser.showQuitWarning", false);
lockPref("browser.warnOnQuit", false);
lockPref("browser.tabs.warnOnClose", false);
lockPref("browser.tabs.warnOnCloseOtherTabs", false);

// Disable Add-ons compatibility checking
clearPref("extensions.lastAppVersion");

// Don't show 'know your rights' on first run
pref("browser.rights.3.shown", true);

//Disable plugin checking
lockPref("plugins.hide_infobar_for_outdated_plugin", true);
clearPref("plugins.update.url");

// Disable health reporter
lockPref("datareporting.healthreport.service.enabled", false);

// Disable all data upload (Telemetry and FHR)
lockPref("datareporting.policy.dataSubmissionEnabled", false);

// Disable crash reporter
lockPref("toolkit.crashreporter.enabled", false);
Components.classes["@mozilla.org/toolkit/crash-reporter;1"].getService(Components.interfaces.nsICrashReporter).submitReports = false;

// Browser Console command line
pref("devtools.chrome.enabled", true);

答案 2 :(得分:4)

从Firefox 47开始:Firefox for Desktop的发行版和Beta版将不允许安装未签名的扩展,没有覆盖。

有关详细信息,请参阅Mozilla Wiki page on Extension Signing

答案 3 :(得分:1)

@ Makyen的解决方案有效但会完全禁用签名检查:

Components.utils.import("resource://gre/modules/addons/XPIProvider.jsm", {})
      .eval("SIGNED_TYPES.clear()");

会获得插件是否已签名的信息。

相反,我建议:

/* Let unsigned addons live! */
Components.utils.import("resource://gre/modules/addons/XPIProvider.jsm", {})
          .eval("function mustSign(aType) { return false; }");
Components.utils.import("resource://gre/modules/addons/XPIProvider.jsm", {})
        .eval("XPIProvider.verifySignatures = function() {}");

当您尝试安装未签名的插件时,它仍然会发出警告,但无论如何都会有效。插件在about:addons中被标记为已禁用,但实际上处于活动状态(您可以像普通插件一样手动禁用/启用它)。

工作原理:

  • mustSign()检查此类插件是否需要签名。

  • verifySignatures()是用于每隔XPI_SIGNATURE_CHECK_PERIOD秒(即每天一次)检查签名的回调

答案 4 :(得分:1)

这是我在thread on HackerNews中找到的有关附加签名启示的代码。它可以在 Firefox 56 和更低版本中使用,而无需重新启动。

  // For FF < v57 >...?
  async function set_addons_as_signed() {
      Components.utils.import("resource://gre/modules/addons/XPIProvider.jsm");
      Components.utils.import("resource://gre/modules/AddonManager.jsm");
      let XPIDatabase = this.XPIInternal.XPIDatabase;

      let addons = await XPIDatabase.getAddonList(a => true);

      for (let addon of addons) {
          // The add-on might have vanished, we'll catch that on the next startup
          if (!addon._sourceBundle.exists())
              continue;

          if( addon.signedState != AddonManager.SIGNEDSTATE_UNKNOWN )
              continue;

          addon.signedState = AddonManager.SIGNEDSTATE_NOT_REQUIRED;
          AddonManagerPrivate.callAddonListeners("onPropertyChanged",
                                                  addon.wrapper,
                                                  ["signedState"]);

          await XPIProvider.updateAddonDisabledState(addon);

      }
      XPIDatabase.saveChanges();
  }

  set_addons_as_signed();

此代码需要在浏览器控制台(不是 Web控制台)中执行,可以通过快捷方式 Ctrl + Shift +访问 J 。它会立即重新启用所有未通过验证的插件。

答案 5 :(得分:0)

我发现一种似乎有效的更简单的方法是翻转 Firefox 用来确定是否强制执行签名的常量。这可能需要在每次 Firefox 更新后完成。

  1. 在 Firefox 安装目录中找到 omni.ja 存档
  2. 将此文件作为 zip 存档解压缩到工作文件夹
  3. 在文本编辑器中编辑 modules/AppConstants.jsm,并将 MOZ_REQUIRE_SIGNING 下的值从 false 更改为 true
  4. 将修改后的内容重新压缩回 omni.ja
  5. 验证 xpinstall.signatures.requiredxpinstall.whitelist.requiredabout:config 下为 false,然后重启 firefox

您未签名的插件现在应该安装了。