webentwicklung-frage-antwort-db.com.de

Wie kann ich die Signaturprüfung für Firefox-Add-Ons deaktivieren?

Seit Version 42 lehnt Firefox standardmäßig die Installation nicht signierter Add-Ons ab. Wie deaktiviere ich diese Überprüfung?

25
czerny

Die Überprüfung der Addons kann nur in Nightly und Developer channel deaktiviert werden. Mit anderen Worten ist es nicht möglich in Betaversionen und Standard-Releases.

  1. Gehen Sie zu about:config (geben Sie ihn in die Adressleiste ein)
  2. Setzen Sie xpinstall.signatures.required auf false.

Mehr unter https://wiki.mozilla.org/Addons/Extension_Signing

32
czerny

Deaktivieren Sie die Überprüfung der Add-On-Signierung in allen Versionen von Firefox

Firefox Version 65+ (oder so)

Die folgenden Anweisungen deaktivieren die Signaturprüfung in Firefox für das Firefox-Profil, in dem Sie die Dateien installieren. Sie werden einige Dateien zum Verzeichnis chrome in Ihrem Firefox-Profilverzeichnis hinzufügen.

Dieser Code funktioniert nicht, wenn javascript.enabled In about:config Auf False gesetzt ist. Diese Option muss auf True gesetzt werden. Dies ist die Standardeinstellung.

Ab Firefox 69+ muss zusätzlich zu den folgenden Anweisungen toolkit.legacyUserProfileCustomizations.stylesheets In about:config Auf true eingestellt sein. Wenn es nicht vorhanden ist, müssen Sie es als boolesche Option erstellen ("neu" im Kontextmenü mit der rechten Maustaste). Weitere Informationen zum Hinzufügen dieser Option finden Sie unter Bugzilla 15412 .

Ich habe dies auf Firefox 66.0.3+ getestet.

Beim Aktualisieren von Versionen wird anscheinend der Browsercode kurz ausgeführt, ohne dass diese Änderungen aktiv sind. Wenn Sie zum ersten Mal eine neue Version von Firefox ausführen, werden alle von Ihnen installierten Erweiterungen deaktiviert, bei denen die Add-On-Signatur deaktiviert werden muss. Sie können diese Erweiterungen sofort nach dem Upgrade auf eine neue Firefox-Version erneut installieren. Die Erweiterungen sollten dann wieder funktionieren.

IIRC, für Firefox 65 wurde ein etwas anderer Code benötigt. Ich glaube, ich habe diesen Code in disable-add-on-signing.js belassen, als ich ihn für Firefox 66 geändert habe, bin es aber nicht dessen sicher.

Wir werden eine Technik verwenden, mit der Sie beliebigen JavaScript-Code im Browserkontext aus Dateien ausführen können, die in Ihrem Firefox-Profilverzeichnis gespeichert sind. Wie das geht, habe ich in GitHub-Repository von Haggai Nuchi: Firefox Quantum-kompatibles userChrome.js gefunden.

Unter Windows lautet Ihr Firefox-Profilverzeichnis %appdata%\Mozilla\Firefox\Profiles\[profileID]. Wenn Sie nur ein Profil haben, ist [profileID] Das einzige Verzeichnis im Verzeichnis %appdata%\Mozilla\Firefox\Profiles. Wenn Sie über mehrere Profile verfügen, müssen Sie die Profile auswählen, in denen Sie diesen Hack installieren möchten.

Sobald Sie zu Ihrem Profilverzeichnis gelangen, müssen Sie ein Verzeichnis mit dem Namen chrome erstellen, sofern es noch nicht vorhanden ist. Sie fügen die folgenden 3 Dateien in dieses Verzeichnis ein:

  • userChrome.css
  • userChrome.xml
  • disable-add-on-signing.js

Sie benötigen dann den folgenden Code in userChrome.css , der im GitHub-Repository von Haggai Nuchi verfügbar ist:

/*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");
}

Sie benötigen userChrome.xml (Geringfügig geändert von Version im GitHub-Repository von Haggai Nuchi verfügbar ):

<?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>

Sie benötigen außerdem 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.');

Nachdem Sie diese Dateien im Verzeichnis chrome Ihres Profils hinzugefügt haben, müssen Sie Firefox neu starten. Sie können überprüfen, ob der Code ausgeführt wird, indem Sie nach "Add-On-Signierung deaktiviert" suchen. in der Browser-Konsole .

Von Firefox deaktivierte oder entfernte Add-Ons werden nicht automatisch aktiviert. Sie müssen sie erneut installieren. Sie können sie installieren, indem Sie die * .xpi-Datei in ein Firefox-Fenster ziehen und dort bestätigen, dass Sie sie installieren möchten.

Wenn Sie die * .xpi-Datei für eine bestimmte Erweiterung von Mozilla Add-ons herunterladen möchten, klicken Sie mit der rechten Maustaste auf die Schaltfläche "Installieren" und wählen Sie "Speichern unter" oder "Entfernen" ".

Firefox Version 57 oder früher (oder so)

Leider kann ich mich nicht erinnern, mit welcher Firefox-Version diese Methode nicht mehr funktioniert hat. Ich weiß, dass ich es in Firefox 54, 55, 52ESR und FF56 verwendet habe. *.

Ich fand diese Lösung zum Deaktivieren der erzwungenen Signaturprüfung zunächst in diesem Blog-Beitrag , der die ursprüngliche Quelle für den (etwas geänderten) Code in dieser Antwort ist. Wenn Sie diese Änderungen vornehmen, können Sie nicht signierte Add-Ons mit der von Ihnen geänderten Firefox-Distribution in Profilen installieren. Für die meisten Leute ist dies Ihre Hauptinstallation von Firefox. Wenn Sie jedoch mehrere Versionen installiert haben, müssen Sie diese Änderung bei jeder Installation vornehmen. Sobald Sie Änderungen vorgenommen haben, bleiben diese jedoch durch normale Firefox-Updates erhalten.

Sie müssen einige Dateien im Firefox-Installationsverzeichnis hinzufügen. Sie finden unter mozillaZine eine Liste mit Beispielen für Installationsverzeichnisse für Windows, Linux und Mac OS . Die am häufigsten verwendeten Installationsverzeichnisse sind:

  • Windows
    • C:\Programme\Mozilla Firefox \
    • C:\Programme (x86)\Mozilla Firefox \
  • Linux
    • / usr/lib/firefox- <version>
  • OSX
    • /Anwendungen/Firefox.app

Erste Datei hinzufügen

Sie müssen dann den folgenden Code als Datei <Install directory>/defaults/pref/disable-add-on-signing-prefs.js Hinzufügen (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");

Zweite Datei hinzufügen

Sie müssen auch den folgenden Code als Datei <Install directory>/disable-add-on-signing.js Hinzufügen (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) {}

Ergebnisse

Ich verwende diese Lösungen seit Jahren, um einige von mir selbst erstellte Erweiterungen zu installieren und neue Versionen von Erweiterungen zu testen, an denen ich arbeite (wenn ich in Release-Version testen möchte = anstelle von Firefox Developer Edition oder Nightly ).

HINWEIS: In about:addons Firefox may wird (unter bestimmten Bedingungen) das Add-On als aktiviert angezeigt (nicht ausgegraut), aber Sie haben einen Text, der besagt, dass das Add-On "nicht verifiziert werden konnte und deaktiviert wurde". Der Text ist nicht korrekt! Das Add-On ist aktiviert und funktioniert.

Wie es funktioniert

Innerhalb von resource://gre/modules/addons/XPIProvider.jsm ist der const SIGNED_TYPES Als Set definiert. Damit ein Add-On signiert werden muss, muss sein Typ Mitglied von Set sein. Mit der Methode Set.prototype.clear() werden alle Einträge aus dem Set gelöscht. Dies führt zu keinen Add-On-Typen, die signiert werden müssen ( Code 1 , Code 2 ).

Wenn Sie möchten, können Sie die Signaturprüfung für jeden der folgenden Typen einzeln deaktivieren: "webextension", "extension", "experiment" Oder "apiextension".

Entfernen Sie das Verzeichnis META-INF von allen geänderten Erweiterungen

Die zusätzlichen Dateien in den obigen Abschnitten deaktivieren die Voraussetzung, dass die Erweiterungen müssen signiert werden. Wenn die Signaturdateien vorhanden sind, wird die Signatur weiterhin überprüft. Wenn Sie also eine Erweiterung von einer gesengten geändert haben und die Signaturdateien nicht entfernt haben, schlägt die Signaturüberprüfung für die Erweiterung fehl. Mit anderen Worten, die tatsächliche Überprüfung vorhandener Signaturen ist ein separater Schritt von der Anforderung, dass die Signatur vorhanden sein muss.

Wenn Sie eine signierte Erweiterung geändert haben (Sie können feststellen, dass sie durch das Vorhandensein eines META-INF -Verzeichnisses im Stammverzeichnis der Erweiterung signiert wurde), müssen Sie diese entfernen die Signaturdateien. Sie können dies tun, indem Sie das Verzeichnis META-INF und alle darin enthaltenen Dateien entfernen.


1. Der Code im Blog fügt diesen Aufruf in einen try{}catch(){} -Block ein. Das ist wirklich nicht nötig. Das einzig wirksame Mittel ist, zu verhindern, dass Fehler in der Browser-Konsole (gemeldet werden.Ctrl-Shift-J, oder Cmd-Shift-J unter OSX). Es ist kein zusätzlicher Code erforderlich, der ausgeführt werden soll, wenn dies fehlschlägt. Außerdem würde ich es vorziehen, den Fehler in der Browserkonsole zu sehen, wenn dies fehlschlägt, um zu wissen, dass er tatsächlich fehlgeschlagen ist. Das Fehlen der Funktion try{}catch(){} hat keine negativen Auswirkungen und ermöglicht das Auffinden des Problems, wenn Add-Ons in einer zukünftigen Version von Firefox deaktiviert werden, weil sie nicht signiert sind.

17
Makyen

Ab Firefox 47: Release- und Beta-Versionen von Firefox for Desktop können nicht signierte Erweiterungen ohne Überschreibung nicht installiert werden. 

Weitere Informationen finden Sie auf der Mozilla Wiki-Seite unter Extension Signing .

4
Dalin

Um die obige Antwort zu vervollständigen, erkenne ich firefox-autoconfig , das aus der Installation einer autoconfig.js-Datei in <FIREFOX INSTALLATION DIR>/default/prefs und einer ci.clg-Datei in <FIREFOX INSTALLATION DIR> besteht, um xpinstall.signatures.required (und andere Optionen ebenfalls zu deaktivieren) ) definitiv und automatisch beim Öffnen von Firefox (getestet mit Firefox 45.0.1)

Sie werden diese Inhalte in autoconfig.js sehen:

//
pref("general.config.filename", "ci.cfg");
pref("general.config.obscure_value", 0);

Und diese Inhalte in 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);
4
Irrmich

Dies ist der Code, den ich im Thread auf HackerNews über Add-On-Signing-Apokalypse gefunden habe. Es funktioniert in Firefox 56 und älteren Versionen ohne Neustart.

  // 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();

Dieser Code muss in der Browserkonsole ( nicht Webkonsole) ausgeführt werden, auf die über die Verknüpfung zugegriffen werden kann Ctrl+Shift+J. Alle Addons, deren Verifizierung fehlgeschlagen ist, werden sofort wieder aktiviert.

1
Athari

Die Lösung von @ Makyen funktioniert, deaktiviert jedoch die Signaturprüfung vollständig:

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

Sie werden nicht wissen, ob das Addon signiert ist.

Stattdessen würde ich Folgendes vorschlagen:

/* 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() {}");

Sie werden immer noch gewarnt, wenn Sie versuchen, ein nicht signiertes Addon zu installieren, aber es funktioniert trotzdem. Das Addon wird in about:addons als deaktiviert markiert, ist aber tatsächlich aktiv (Sie können es wie ein normales Addon manuell deaktivieren/aktivieren).

Wie es funktioniert:

  • mustSign() prüft, ob für diesen Addon-Typ eine Signatur erforderlich ist.

  • verifySignatures() ist ein Rückruf, mit dem Signaturen alle XPI_SIGNATURE_CHECK_PERIOD Sekunden (d. h. einmal pro Tag) überprüft werden.

0
ysdx