webdevqa.jp.net

Firefoxアドオンの署名チェックを無効にするにはどうすればよいですか?

バージョン42以降、Firefoxはデフォルトで、署名のないアドオンのインストールを拒否します。この検証を無効にするにはどうすればよいですか?

40
czerny

Nightly および Developer チャンネルでのみアドオンの検証を無効にすることができます。つまり、ベータ版と標準リリースでは不可能です。

  1. about:configに移動します(アドレスバーに入力します)
  2. xpinstall.signatures.requiredfalseに設定します。

詳細は https://wiki.mozilla.org/Addons/Extension_Signing

35
czerny

Firefoxのリリース(すべて)バージョンでアドオン署名チェックを無効にする

Firefoxバージョン65以降(または)

以下の手順は、ファイルをインストールするFirefoxプロファイルのFirefoxでの署名チェックを無効にします。 Firefoxプロファイルディレクトリの下のchromeディレクトリにいくつかのファイルを追加します。

_javascript.enabled_で_about:config_がFalseに設定されている場合、このコードは機能しません。このオプションは、デフォルト設定であるTrueに設定する必要があります。

Firefox 69以降では、以下の手順に加えて、_toolkit.legacyUserProfileCustomizations.stylesheets_を_about:config_のtrueに設定する必要があります。存在しない場合は、ブールオプションとして作成する必要があります(右クリックのコンテキストメニューで「新規」)。このオプションの追加の詳細については、 Bugzilla 15412 を参照してください。

これをFirefox 66.0.3+でテストしました。

バージョンをアップグレードするプロセスは、これらの変更がアクティブになっていない状態でブラウザーコードを短時間実行するようです。したがって、Firefoxの新しいバージョンを初めて実行するとき、アドオン署名の無効化に依存するインストール済みの拡張機能は無効になります。 Firefoxの新しいバージョンにアップグレードした後、これらの拡張機能をすぐに再インストールできます。拡張機能は動作を再開します。

IIRC、Firefox 65には若干異なるコードが必要でした。Firefox66に変更したときにdisable-add-on-signing.jsにコードを残したと思いますが、それ。

Firefoxのプロファイルディレクトリに保存されているファイルから、ブラウザーコンテキストで任意のJavaScriptコードを実行できる手法を使用します。 Haggai NuchiのGitHubリポジトリ:Firefox Quantum互換userChrome.js からこれを行う方法を見つけました。

Windowsでは、Firefoxプロファイルディレクトリは_%appdata%\Mozilla\Firefox\Profiles\[profileID]_になります。プロファイルが1つしかない場合、_[profileID]_が_%appdata%\Mozilla\Firefox\Profiles_ディレクトリ内の唯一のディレクトリになります。複数のプロファイルがある場合は、このハックをインストールするプロファイルを選択する必要があります。

プロファイルディレクトリに到達したら、chromeというディレクトリがまだ存在しない場合は作成する必要があります。そのディレクトリに以下の3つのファイルを追加します。

  • _userChrome.css_
  • _userChrome.xml_
  • _disable-add-on-signing.js_

次に、Haggai NuchiのGitHubリポジトリから入手できる _userChrome.css_ に次のコードが必要になります。

_/*Enable userChrome.js */
/* Copyright (c) 2017 Haggai Nuchi
Available for use under the MIT License:
https://opensource.org/licenses/MIT
*/

@namespace url(http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul);

toolbarbutton#alltabs-button {
    -moz-binding: url("userChrome.xml#js");
}
_

_userChrome.xml_が必要です( Haggai NuchiのGitHubリポジトリで利用可能なバージョン )から少し変更されています):

_<?xml version="1.0"?>
<!-- Copyright (c) 2017 Haggai Nuchi
Available for use under the MIT License:
https://opensource.org/licenses/MIT
 -->
<!-- This has been slightly modified from the version available from
https://github.com/nuchi/firefox-quantum-userchromejs/blob/master/userChrome.xml
by Makyen. The modified version is released under both the MIT and CC BY-SA 3.0 licenses.
 -->

<bindings id="generalBindings"
   xmlns="http://www.mozilla.org/xbl"
   xmlns:xul="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
   xmlns:xbl="http://www.mozilla.org/xbl">

  <binding id="js" extends="chrome://global/content/bindings/toolbarbutton.xml#toolbarbutton-badged">
    <implementation>
        <constructor><![CDATA[
            function makeRelativePathURI(name) {
              let absolutePath = Components.stack.filename;
              return absolutePath.substring(0, absolutePath.lastIndexOf("/") + 1) + name;
            }
            // The following code executes in the browser context,
            // i.e. chrome://browser/content/browser.xul
            try {
                Services.scriptloader.loadSubScript(makeRelativePathURI("disable-add-on-signing.js"), window);
            } catch(e) {
                console.error(e);
            }
        ]]></constructor>
    </implementation>
  </binding>
</bindings>
_

また、_disable-add-on-signing.js_も必要です。

_//This should be installed as the file disable-add-on-signing.js in
//  your profile's "chrome" directory.

//Earlier versions of Firefox
try {
    Components.utils.import("resource://gre/modules/addons/XPIProvider.jsm", {}).eval("SIGNED_TYPES.clear()");
} catch(ex) {}
try {
    Components.utils.import("resource://gre/modules/addons/XPIInstall.jsm", {}).eval("SIGNED_TYPES.clear()");
} catch(ex) {}
try {
    Components.utils.import("resource://gre/modules/addons/XPIDatabase.jsm", {}).eval("SIGNED_TYPES.clear()");
} catch(ex) {}

//Tested on Firefox 66
const {XPCOMUtils} = ChromeUtils.import("resource://gre/modules/XPCOMUtils.jsm");
XPCOMUtils.defineLazyModuleGetters(this, {
    XPIDatabase: "resource://gre/modules/addons/XPIDatabase.jsm",
});
XPIDatabase.SIGNED_TYPES.clear();

console.log('Add-on signing disabled.');
_

これらのファイルをプロファイルのchromeディレクトリに追加したら、Firefoxを再起動する必要があります。 「アドオン署名が無効になっています」を探すと、コードが実行されていることを確認できます。 ブラウザコンソール で。

Firefoxによって無効化または削除されたアドオンは、自動的に有効化されません。それらを再インストールする必要があります。 * .xpiファイルをFirefoxウィンドウにドラッグアンドドロップし、インストールすることを確認することでインストールできます。

Mozillaアドオン から特定の拡張子の* .xpiファイルを取得したい場合は、「インストール」ボタンを右クリックして「名前を付けて保存」または「削除」を選択してダウンロードできます。 「。

Firefoxバージョン57以前(またはそれ以降)

残念ながら、このメソッドが機能しなくなったFirefoxのバージョンを思い出せません。 Firefox 54、55、52ESR、FF56で使用していたことを知っています。*。

このブログ投稿 で強制アドオン署名チェックを無効にするこのソリューションを最初に見つけました。これは、この回答の(多少変更された)コードの元のソースです。これらの変更を行うと、変更したFirefoxディストリビューションを使用して、署名のないアドオンをプロファイルにインストールできます。ほとんどの人にとって、これがメインのFirefoxインストールになります。ただし、複数のバージョンをインストールしている場合は、インストールごとにこの変更を行う必要があります。ただし、一度変更を加えると、通常のFirefoxの更新を通じて変更が残ります。

Firefoxのインストールディレクトリ内にいくつかのファイルを追加する必要があります。 mozillaZine上のWindows、Linux、およびMac OSのインストールディレクトリの例のリスト を見つけることができます。最も一般的なインストールディレクトリは次のとおりです。

  • Windows
    • C:\ Program Files\Mozilla Firefox \
    • C:\ Program Files(x86)\ Mozilla Firefox \
  • Linux
    • / usr/lib/firefox- <バージョン>
  • OSX
    • /Applications/Firefox.app

最初のファイルを追加

次に、ファイル_<Install directory>/defaults/pref/disable-add-on-signing-prefs.js_(Windows:_<Install directory>\defaults\pref\disable-add-on-signing-prefs.js_)として以下のコードを追加する必要があります。

_//This file should be placed in the defaults/pref directory (folder)
//within the Firefox installation directory with the with the name:
//  disable-add-on-signing-prefs.js
pref("general.config.obscure_value", 0);
pref("general.config.filename", "disable-add-on-signing.js");
_

2番目のファイルを追加

また、ファイル_<Install directory>/disable-add-on-signing.js_(Windows:_<Install directory>\disable-add-on-signing.js_)として以下のコードを追加する必要があります。1

_//This file should be placed in the Firefox installation directory
//(folder) with the with the name:
//  disable-add-on-signing.js
try {
    Components.utils.import("resource://gre/modules/addons/XPIProvider.jsm", {})
              .eval("SIGNED_TYPES.clear()");
} catch(ex) {}
try {
    Components.utils.import("resource://gre/modules/addons/XPIInstall.jsm", {})
              .eval("SIGNED_TYPES.clear()");
} catch(ex) {}
_

結果

私は長年にわたってこれらのソリューションを使用して、自分の使用のために構築したいくつかの拡張機能をインストールし、作業中の拡張機能の新しいバージョンをテストしています( リリースバージョン = Firefox Developer Edition または Nightly )の代わりに。

注:_about:addons_ Firefoxでmayアドオンを有効(灰色表示ではない)として表示します(一部の条件下で)が、テキストを表示しますアドオンは「検証できなかったため無効になっています」。テキストは正確ではありません!アドオンは有効で機能しています。

使い方

_resource://gre/modules/addons/XPIProvider.jsm_ 内で、_const SIGNED_TYPES_は Set として定義されます。アドオンが署名を要求するには、そのタイプがそのSetのメンバーである必要があります。 Set.prototype.clear() メソッドは、Setからすべてのエントリをクリアするために使用されます。これにより、署名が必要なアドオンタイプがなくなります( code 1code 2 )。

必要に応じて、_"webextension"_、_"extension"_、_"experiment"_、または_"apiextension"_のいずれかのタイプの署名チェックを個別に無効にすることができます。

変更した拡張機能からMETA-INFディレクトリを削除します

上記のセクションの追加ファイルは、requirementの拡張機能を無効にしますmust署名されます。署名ファイルが存在する場合、署名は引き続き検証されます。したがって、拡張機能を歌った拡張機能から変更し、署名ファイルを削除していない場合、拡張機能は署名の検証に失敗します。つまり、既存の署名を実際に確認することは、署名が存在する必要があるという要件とは別の手順です。

署名された拡張機能を変更した場合(拡張機能のルートディレクトリにMETA-INFディレクトリが存在することで署名されたことを確認できます)、署名を削除する必要があります。ファイル。これを行うには、META-INFディレクトリとそのディレクトリに含まれるすべてのファイルを削除します。


1.ブログのコードは、この呼び出しをtry{}catch(){}ブロックに入れます。本当にそうする必要はありません。これを行う唯一の効果的なことは、 Browser ConsoleCtrl-Shift-J、 または Cmd-Shift-J OSXで)。これが失敗した場合に実行することが望ましい追加のコードはありません。さらに、実際に失敗したことを知るために、これが失敗した場合、ブラウザコンソールでエラーを表示できるようにしたいと思います。 try{}catch(){}を持たなくても悪影響はなく、Firefoxの将来のバージョンでアドオンが署名されていないために無効になり始めた場合に問題を追跡できます。

17
Makyen

Firefox 47以降:Firefox for Desktopのリリースおよびベータバージョンでは、署名なしの拡張機能を上書きなしでインストールできません。

詳細については、 拡張機能の署名に関するMozilla Wikiページ を参照してください。

4
Dalin

@Makyenのソリューションは機能しますが、署名チェックを完全に無効にします。

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

notアドオンが署名されているかどうかの情報を取得します。

代わりに私はこれをお勧めします:

_/* 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_秒(つまり、1日に1回)ごとに署名をチェックするために使用されるコールバックです

1
ysdx

これは、アドオン署名黙示録に関する 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();

このコードは、ブラウザコンソール(notWebコンソール)で実行する必要があります。これは、ショートカットからアクセスできます。 Ctrl+Shift+J。検証に失敗したすべてのアドオンを即座に再度有効にします。

1
Athari