バージョン42以降、Firefoxはデフォルトで、署名のないアドオンのインストールを拒否します。この検証を無効にするにはどうすればよいですか?
以下の手順は、ファイルをインストールする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のバージョンを思い出せません。 Firefox 54、55、52ESR、FF56で使用していたことを知っています。*。
このブログ投稿 で強制アドオン署名チェックを無効にするこのソリューションを最初に見つけました。これは、この回答の(多少変更された)コードの元のソースです。これらの変更を行うと、変更したFirefoxディストリビューションを使用して、署名のないアドオンをプロファイルにインストールできます。ほとんどの人にとって、これがメインのFirefoxインストールになります。ただし、複数のバージョンをインストールしている場合は、インストールごとにこの変更を行う必要があります。ただし、一度変更を加えると、通常のFirefoxの更新を通じて変更が残ります。
Firefoxのインストールディレクトリ内にいくつかのファイルを追加する必要があります。 mozillaZine上のWindows、Linux、およびMac OSのインストールディレクトリの例のリスト を見つけることができます。最も一般的なインストールディレクトリは次のとおりです。
次に、ファイル_<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");
_
また、ファイル_<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 1 、 code 2 )。
必要に応じて、_"webextension"
_、_"extension"
_、_"experiment"
_、または_"apiextension"
_のいずれかのタイプの署名チェックを個別に無効にすることができます。
上記のセクションの追加ファイルは、requirementの拡張機能を無効にしますmust署名されます。署名ファイルが存在する場合、署名は引き続き検証されます。したがって、拡張機能を歌った拡張機能から変更し、署名ファイルを削除していない場合、拡張機能は署名の検証に失敗します。つまり、既存の署名を実際に確認することは、署名が存在する必要があるという要件とは別の手順です。
署名された拡張機能を変更した場合(拡張機能のルートディレクトリにMETA-INFディレクトリが存在することで署名されたことを確認できます)、署名を削除する必要があります。ファイル。これを行うには、META-INFディレクトリとそのディレクトリに含まれるすべてのファイルを削除します。
1.ブログのコードは、この呼び出しをtry{}catch(){}
ブロックに入れます。本当にそうする必要はありません。これを行う唯一の効果的なことは、 Browser Console (Ctrl-Shift-J、 または Cmd-Shift-J OSXで)。これが失敗した場合に実行することが望ましい追加のコードはありません。さらに、実際に失敗したことを知るために、これが失敗した場合、ブラウザコンソールでエラーを表示できるようにしたいと思います。 try{}catch(){}
を持たなくても悪影響はなく、Firefoxの将来のバージョンでアドオンが署名されていないために無効になり始めた場合に問題を追跡できます。
Firefox 47以降:Firefox for Desktopのリリースおよびベータバージョンでは、署名なしの拡張機能を上書きなしでインストールできません。
詳細については、 拡張機能の署名に関するMozilla Wikiページ を参照してください。
@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回)ごとに署名をチェックするために使用されるコールバックです
これは、アドオン署名黙示録に関する 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。検証に失敗したすべてのアドオンを即座に再度有効にします。