Filter für Inhalte

Es gibt verschiedene Möglichkeiten, Inhalts- und Netzwerkfilter in Chrome-Erweiterungen zu implementieren. Dieser Leitfaden bietet einen Überblick über die Funktionen zum Filtern von Inhalten für Erweiterungen sowie über die verschiedenen Filteransätze, -techniken und -APIs, die von Chrome-Erweiterungen verwendet werden können.

Netzwerkanfragen filtern

Netzwerkanfragen in Chrome-Erweiterungen lassen sich hauptsächlich mithilfe der chrome.declarativeNetRequest API filtern. Mit der deklarativen Nettoanfrage können Entwickler Netzwerkanfragen blockieren oder ändern, indem sie deklarative Regeln angeben. Das Regelformat für die deklarative Nettoanfrage basiert auf den Funktionen der Filterlistensyntax, die von den meisten Werbeblockern verwendet wird.

Diese Regeln bieten folgende Möglichkeiten:

  • Netzwerkanfrage blockieren
  • Aktualisieren Sie das URL-Schema auf ein sicheres Schema (http zu https oder ws zu wss).
  • Eine Netzwerkanfrage weiterleiten
  • Ändern Sie Anfrage- oder Antwortheader.

Chrome unterstützt Regeln, die mit einer Erweiterung gebündelt sind, und Regeln, die dynamisch aktualisiert werden, z. B. als Reaktion auf eine Remote-Konfiguration oder Nutzereingabe.

Filterregeln mit Ihrer Erweiterung gruppieren

Die in Ihrem Erweiterungspaket enthaltenen Regeln 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 deklarative Nettoanfrageregeln bietet Chrome einen globalen gemeinsamen Pool von 300.000 Regeln, die von allen installierten Erweiterungen gemeinsam verwendet werden können. Darüber hinaus werden für jede Erweiterung garantiert 30.000 statische Regeln gewährt. Wenn ein Nutzer beispielsweise nur eine einzige Erweiterung zum Filtern von Inhalten installiert hat, kann die Erweiterung bis zu 330.000 statische deklarative Nettoanfrageregeln verwenden. Die beliebte EasyList-Filterliste, die von den meisten Werbeblockern verwendet wird, enthält rund 35.000 Netzwerkregeln.

Regeln für statische deklarative Nettoanfragen können in verschiedenen Regelsätzen organisiert werden. Mit einer Erweiterung können bis zu 100 statische Regelsätze angegeben werden, von denen jeweils 50 gleichzeitig aktiviert werden können.

Filterregeln zur Laufzeit dynamisch hinzufügen

Einige Regeln können nicht mit der Erweiterung gebündelt werden. Stattdessen müssen die Erweiterungen zur Laufzeit hinzugefügt werden. Diese Regeln werden als „dynamische Regeln“ bezeichnet.

Bei dynamischen deklarativen Nettoanfrageregeln sind in Chrome bis zu 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 eingestuft wird (z. B. redirect), kann sie trotzdem dynamisch hinzugefügt werden. Dabei gilt aber eine niedrigere Höchstgrenze von 5.000, was ebenfalls auf das Limit von 30.000 dynamischen Regeln angerechnet wird. Zum Vergleich: 98 bis 99% der Regeln in der Easylist-Filterliste sind sichere Regeln.

Erweiterungen zum Filtern von Inhalten können statische bzw. dynamische Regeln verwenden, um bekannte Filterregeln mit ihrer Erweiterung zu bündeln und ihre Erweiterungen bei Bedarf mit neuen Regeln zur Inhaltsfilterung von ihren Servern zu aktualisieren.

Regeln basierend auf beobachteten Anfragen anpassen

Das Werbesystem wird ständig weiterentwickelt und die Inhaltsfilter müssen entsprechend aktualisiert werden. Durch die Kombination von chrome.webRequest und dynamischen Regeln für deklarative Nettoanfragen können Sie Netzwerkanfragen auf mögliche Datenschutzverstöße analysieren und diese in Zukunft blockieren.

Der grundlegende Ansatz sieht so aus:

  1. Analysieren Sie Webanfragen mit der chrome.webRequest API und versuchen Sie, automatisch Anfragen zu identifizieren, die Ihren Datenschutzanforderungen nicht entsprechen, z. B. mithilfe von maschinellem Lernen.
  2. Erstellen Sie für jede in Schritt 2 ermittelte Anfrage eine dynamische Regel für deklarative Nettoanfragen, damit ähnliche Anfragen in Zukunft blockiert werden.
  3. (Optional) Senden Sie die identifizierte Regel für die deklarative Nettoanfrage an Ihren Server zurück, damit sie beim nächsten Erweiterungsupdate als statische Regel für deklarative Nettoanfragen hinzugefügt werden kann.

Der Vorteil dieses Ansatzes besteht darin, dass die Analyse asynchron erfolgt und sich nicht negativ auf die Websiteleistung auswirkt.

Nutzern erlauben, eigene Filterregeln zu definieren

Sie können zulassen, dass Nutzer eigene Inhaltsfilterregeln definieren, indem Sie in Ihrer Erweiterung eine UI für die Filterkonfiguration bereitstellen. Wandeln Sie diese benutzerdefinierten Regeln in Regeln für deklarative Nettoanfragen um und fügen Sie sie als dynamische Regeln hinzu. Diese Regeln stehen Nutzern weiterhin zur Verfügung, da sie über Browsersitzungen und Erweiterungsupgrades hinweg bestehen bleiben. So können Nutzer bis zu 30.000 benutzerdefinierte Regeln hinzufügen.

Elemente auf Webseiten filtern

Das Filtern von Netzwerkanfragen ist nur ein wichtiger Bestandteil der Inhaltsfilterung. Ein weiterer großer Schritt ist das direkte Entfernen unerwünschter Inhalte von Webseiten. So legen beispielsweise über 40% der Regeln für easylist-Filterlisten fest, wie Kunden Seitenelemente ausblenden sollen.

Das kann mithilfe von Content-Scripts umgesetzt werden. Inhaltsskripte werden im Kontext von Webseiten ausgeführt und können mithilfe des DOMs Änderungen daran vornehmen.

Chrome-Erweiterungen dürfen keinen remote gehosteten Code ausführen. Daten von einem Server, die angeben, welche Elemente ausgeblendet werden, sind jedoch nicht betroffen, da sie als Konfigurationsdaten betrachtet werden. Daher können Elementregeln bei Bedarf während der Laufzeit aktualisiert werden.

Netzwerkanfragen in durch Richtlinien installierten Erweiterungen filtern

Für Anwendungsfälle in Unternehmen und Bildungseinrichtungen gelten häufig extrem strenge Anforderungen an das Filtern von Inhalten und Netzwerken, z. B. das Filtern von Anfragen nach Inhalten. Um diese Anwendungsfälle zu ermöglichen, gibt es durch Richtlinien installierte Erweiterungen eine zusätzliche Möglichkeit, Netzwerkanfragen zu filtern und zu blockieren. Wenn Sie die Option „Blockieren“ für Ereignisse in der webRequest API verwenden, können Sie einen programmatischen Inhaltsfilter implementieren, der bei jeder Anfrage eine benutzerdefinierte Logik ausführt und so entscheidet, ob eine Anfrage blockiert werden soll oder nicht. Dies ist auf Erweiterungen beschränkt, die über Richtlinien installiert wurden, da diese eine höhere Vertrauenswürdigkeit haben.

Navigationsanfragen abfangen

Navigationsanfragen können mithilfe von Regeln für deklarative Nettoanfragen gefiltert werden. So lassen sich beispielsweise Tracking-URLs umgehen, über die der Nutzer zu seinem gewünschten Ziel weitergeleitet wird. Eine mögliche Lösung besteht darin, eine Navigationsanfrage https://tracker.com?redirect=https%3A%2F%2Fexample.com an eine Erweiterungsseite weiterzuleiten, die als über das Web zugängliche Ressource konfiguriert werden muss. Diese muss dann ein Skript ausführen, um das Weiterleitungsziel zu extrahieren und mithilfe von window.location.replace("https://example.com") an das Ziel weiterzuleiten, wobei der Link-Tracker umgangen wird.