Es gibt verschiedene Möglichkeiten, Inhalts- und Netzwerkfilter in Chrome-Erweiterungen zu implementieren. Dieser Leitfaden bietet einen Überblick über die Funktionen zur Inhaltsfilterung, die für Erweiterungen verfügbar sind, sowie über die verschiedenen Filteransätze, ‑techniken und ‑APIs, die von Chrome-Erweiterungen verwendet werden können.
Netzwerkanfragen filtern
Die primäre Methode zum Filtern von Netzwerkanfragen in Chrome-Erweiterungen ist die Verwendung der chrome.declarativeNetRequest API. Mit Declarative Net Request können Entwickler Netzwerkanfragen blockieren oder ändern, indem sie deklarative Regeln angeben. Das Regelformat für deklarative Netzwerkanfragen basiert auf den Funktionen der Filterlistensyntax, die von den meisten Werbeblockern verwendet wird.
Mit diesen Regeln können Sie:
- Blockieren Sie eine Netzwerkanfrage.
- Führen Sie ein Upgrade des URL-Schemas auf ein sicheres Schema durch (http zu https oder ws zu wss).
- Netzwerkanfrage umleiten
- Anfrage- oder Antwortheader ändern.
Chrome unterstützt Regeln, die mit einer Erweiterung gebündelt sind und dynamisch aktualisiert werden (z. B. als Reaktion auf eine Remote-Konfiguration oder Nutzereingaben).
Filterregeln für Sets mit Ihrer Erweiterung bündeln
Regeln, die in Ihrem Erweiterungspaket enthalten sind, werden als „statische Regeln“ bezeichnet. Diese Regeln werden installiert und aktualisiert, wenn eine Erweiterung installiert oder aktualisiert wird. Chrome schränkt die Anzahl der statischen Regeln ein, die eine Erweiterung deklarieren kann.
Für statische „Declarative Net Request“-Regeln hat Chrome einen globalen gemeinsamen Pool von 300.000 Regeln, die von den installierten Erweiterungen gemeinsam verwendet werden können. Außerdem sind für jede Erweiterung 30.000 statische Regeln garantiert. Wenn ein Nutzer beispielsweise nur eine Erweiterung zur Inhaltsfilterung installiert hat, kann die Erweiterung bis zu 330.000 statische Declarative Net Request-Regeln verwenden. Die beliebte EasyList-Filterliste, die von den meisten Ad-Blockern verwendet wird, besteht aus etwa 35.000 Netzwerkregeln.
Statische deklarative Net Request-Regeln können in verschiedenen Regelsätzen organisiert werden. Eine Erweiterung kann bis zu 100 statische Regelsätze angeben. Davon können 50 Regelsätze gleichzeitig aktiviert werden.
Filterregeln zur Laufzeit dynamisch hinzufügen
Einige Regeln können nicht mit der Erweiterung gebündelt werden. Stattdessen müssen Erweiterungen sie zur Laufzeit hinzufügen. Diese Regeln werden als „dynamische Regeln“ bezeichnet.
Für dynamische Declarative Net Request-Regeln sind in Chrome maximal 30.000 sichere dynamische Regeln pro Erweiterung zulässig. Die meisten Regeln gelten als sichere Regeln: block, allow, allowAllRequests oder upgradeScheme. Auch wenn eine Regel nicht als sicher gilt (z. B. redirect), kann sie dynamisch hinzugefügt werden. Es gilt jedoch ein niedrigeres Limit von maximal 5.000 Regeln, das auch auf das Limit von 30.000 dynamischen Regeln angerechnet wird. 98–99% der Regeln in der Filterliste „easylist“ sind sichere Regeln.
Erweiterungen zum Filtern von Inhalten können statische und dynamische Regeln verwenden, um bekannte Filterregeln mit ihrer Erweiterung zu bündeln und ihre Erweiterungen bei Bedarf mit neuen Regeln zum Filtern von Inhalten von ihren Servern zu aktualisieren.
Regeln basierend auf beobachteten Anfragen anpassen
Der Werbemarkt entwickelt sich ständig weiter und Inhaltsfilter müssen entsprechend aktualisiert werden. Durch die Kombination von chrome.webRequest und dynamischen deklarativen Netzwerkanforderungsregeln ist es möglich, Netzwerkanfragen auf potenzielle Datenschutzverstöße zu analysieren und diese in Zukunft zu blockieren.
Der grundlegende Ansatz ist:
- Analysieren Sie Webanfragen mit der
chrome.webRequestAPI und versuchen Sie, Anfragen, die nicht Ihren Datenschutzanforderungen entsprechen, automatisch zu identifizieren, z. B. mithilfe von Machine Learning. - Erstellen Sie für jede Anfrage, die in Schritt 2 identifiziert wurde, eine dynamische deklarative Netzwerkanfrage-Regel, damit ähnliche Anfragen in Zukunft blockiert werden.
- (Optional) Senden Sie die identifizierte Regel für deklarative Netzwerkanfragen zurück an Ihren Server, damit sie bei der nächsten Erweiterungsaktualisierung als statische Regel für deklarative Netzwerkanfragen hinzugefügt werden kann.
Der Vorteil dieses Ansatzes ist, dass die Analyse asynchron erfolgt und sich nicht negativ auf die Websiteleistung auswirkt.
Nutzern erlauben, eigene Filterregeln zu definieren
Sie können Nutzern erlauben, eigene Regeln für die Inhaltsfilterung zu definieren, indem Sie in Ihrer Erweiterung eine UI für die Filterkonfiguration bereitstellen. Wandeln Sie diese benutzerdefinierten Regeln in Declarative Net Request-Regeln um und fügen Sie sie als dynamische Regeln hinzu. Diese Regeln bleiben für Nutzer verfügbar, da sie browserübergreifend und auch nach Erweiterungs-Upgrades bestehen bleiben. Mit diesem Ansatz können Nutzer bis zu 30.000 benutzerdefinierte Regeln hinzufügen.
Elemente auf Webseiten filtern
Das Filtern von Netzwerkanfragen ist nur ein wichtiger Teil der Inhaltsfilterung. Ein weiterer wichtiger Aspekt ist das Entfernen unerwünschter Inhalte direkt von Webseiten. Beispielsweise definieren mehr als 40% der Regeln in der easylist-Filterliste, wie Client-Anwendungen Seitenelemente ausblenden sollen.
Dazu können Content-Scripts verwendet werden. Content-Scripts werden im Kontext von Webseiten ausgeführt und können mithilfe des DOM Änderungen an ihnen vornehmen.
Chrome-Erweiterungen dürfen keinen remote gehosteten Code ausführen. Daten von einem Server, die angeben, welche Elemente ausgeblendet werden sollen, sind davon jedoch nicht betroffen, da sie als Konfigurationsdaten gelten. Daher können Elementregeln bei Bedarf zur Laufzeit aktualisiert werden.
Netzwerkanfragen in Erweiterungen mit installierter Richtlinie filtern
Bei Anwendungsfällen für Unternehmen und Bildungseinrichtungen gelten oft sehr strenge Anforderungen an die Inhalts- und Netzwerkfilterung, z. B. das Filtern von Anfragen anhand ihres Inhalts. Um diese Anwendungsfälle zu ermöglichen, haben Erweiterungen, die über Richtlinien installiert wurden, eine zusätzliche Möglichkeit, Netzwerkanfragen zu filtern und zu blockieren. Mit der Option „blocking“ für Ereignisse in der webRequest API lässt sich ein programmatischer Inhaltsfilter implementieren, der bei jeder Anfrage benutzerdefinierte Logik ausführt, um zu entscheiden, ob eine Anfrage blockiert werden soll oder nicht. Dies ist auf Erweiterungen beschränkt, die gemäß Richtlinie installiert wurden, da diese ein höheres Maß an Vertrauen genießen.
Navigationsanfragen abfangen
Navigationsanfragen können mit Regeln für deklarative Netzwerkanfragen gefiltert werden. So möchten Sie vielleicht Tracking-URLs umgehen, die den Nutzer an das gewünschte Ziel weiterleiten. Eine Möglichkeit, dies zu umgehen, besteht darin, eine Navigationsanfrage https://tracker.com?redirect=https%3A%2F%2Fexample.com an eine Erweiterungsseite weiterzuleiten, die als webzugängliche Ressource konfiguriert werden muss. Auf dieser Seite wird dann ein Skript ausgeführt, um das Weiterleitungsziel zu extrahieren und mit window.location.replace("https://example.com") dorthin weiterzuleiten. So wird der Link-Tracker umgangen.