Filtrowanie treści

Istnieją różne sposoby wdrażania filtrowania treści i sieci w rozszerzeniach do Chrome. Ten przewodnik zawiera omówienie funkcji filtrowania treści dostępnych dla rozszerzeń oraz różnych podejść, technik i interfejsów API, z których mogą korzystać rozszerzenia Chrome.

Filtrowanie żądań sieciowych

Głównym sposobem filtrowania żądań sieci w rozszerzeniach Chrome jest użycie browser.declarativeNetRequest interfejsu API. Za pomocą interfejsu Declarative Net Request deweloperzy mogą blokować lub modyfikować żądania sieciowe, określając reguły deklaratywne. Format reguł deklaratywnych żądań sieciowych opiera się na możliwościach składni listy filtrów używanej przez większość programów do blokowania reklam.

Te reguły mogą:

  • Zablokuj żądanie sieciowe.
  • Zaktualizuj schemat URI adresu URL do bezpiecznego schematu (http na https lub ws na wss).
  • przekierowywać żądania sieciowe,
  • modyfikować nagłówki żądań lub odpowiedzi;

Chrome obsługuje reguły dołączone do rozszerzenia oraz reguły aktualizowane dynamicznie (np. w odpowiedzi na konfigurację zdalną lub dane wejściowe użytkownika).

Grupowanie reguł filtrowania z rozszerzeniem

Reguły zawarte w pakiecie rozszerzenia są nazywane „regułami statycznymi”. Te reguły są instalowane i aktualizowane podczas instalowania lub uaktualniania rozszerzenia. Chrome ogranicza liczbę reguł statycznych, które może zadeklarować rozszerzenie.

W przypadku statycznych reguł deklaratywnego żądania sieciowego Chrome ma globalną pulę 300 tys. reguł, które mogą być używane wspólnie przez zestaw zainstalowanych rozszerzeń. Każde rozszerzenie ma też zagwarantowane 30 000 reguł statycznych. Jeśli na przykład użytkownik ma zainstalowane tylko jedno rozszerzenie do filtrowania treści, może ono używać maksymalnie 330 tys. statycznych reguł deklaratywnego żądania sieciowego. Aby mieć wyobrażenie o tym, ile to reguł, popularna lista filtrów EasyList, z której korzysta większość blokad reklam,zawiera około 35 tys. reguł sieciowych.

Statyczne reguły deklaratywnego żądania sieciowego można uporządkować w różne zestawy reguł. Rozszerzenie może określać maksymalnie 100 statycznych zestawów reguł, z których 50 może być włączonych jednocześnie.

Dynamiczne dodawanie reguł filtrowania w czasie działania

Niektórych reguł nie można połączyć w pakiet z rozszerzeniem. Zamiast tego rozszerzenia muszą dodawać je w czasie działania. Są to tzw. „reguły dynamiczne”.

W przypadku dynamicznych reguł deklaratywnych żądań sieciowych Chrome zezwala na maksymalnie 30 tys. bezpiecznych reguł dynamicznych na rozszerzenie. Większość reguł jest uznawana za bezpieczne: block, allow, allowAllRequests lub upgradeScheme. Nawet jeśli reguła nie jest uznawana za bezpieczną (np. redirect), można ją dodać dynamicznie, ale z niższym limitem maksymalnym wynoszącym 5000, który jest też wliczany do limitu 30 000 reguł dynamicznych. Aby to zobrazować, 98–99% reguł na liście filtrów easylist to bezpieczne reguły.

Rozszerzenia do filtrowania treści mogą używać odpowiednio reguł statycznych i dynamicznych, aby dołączać do rozszerzenia znane reguły filtrowania i w razie potrzeby aktualizować rozszerzenia o nowe reguły filtrowania treści z serwerów.

Dostosowywanie reguł na podstawie obserwowanych żądań

Ekosystem reklamowy stale się rozwija, dlatego filtry treści muszą być odpowiednio aktualizowane. Łącząc browser.webRequest z dynamicznymi regułami deklaratywnych żądań sieciowych, można analizować żądania sieciowe pod kątem potencjalnych naruszeń prywatności i blokować je w przyszłości.

Podstawowe podejście jest następujące:

  1. Analizuj żądania internetowe za pomocą interfejsu browser.webRequest API i próbuj automatycznie identyfikować żądania, które nie spełniają Twoich wymagań dotyczących ochrony prywatności, np. za pomocą uczenia maszynowego.
  2. Utwórz dynamiczną regułę deklaratywnego żądania sieciowego dla każdego żądania zidentyfikowanego w kroku 2, aby podobne żądania były w przyszłości blokowane.
  3. (Opcjonalnie) Wyślij zidentyfikowaną regułę Declarative Net Request z powrotem na serwer, aby można było ją dodać jako statyczną regułę Declarative Net Request przy następnej aktualizacji rozszerzenia.

Zaletą tego podejścia jest to, że analiza odbywa się asynchronicznie i nie wpływa negatywnie na wydajność witryny.

Zezwalanie użytkownikom na definiowanie własnych reguł filtrowania

Możesz umożliwić użytkownikom definiowanie własnych reguł filtrowania treści, udostępniając w rozszerzeniu interfejs konfiguracji filtra. Przekształć te reguły zdefiniowane przez użytkownika w reguły deklaratywnego żądania sieciowego i dodaj je jako reguły dynamiczne. Te reguły będą nadal dostępne dla użytkowników, ponieważ są zachowywane w sesjach przeglądarki i podczas aktualizacji rozszerzeń. W ten sposób użytkownicy mogą dodać do 30 tys. reguł niestandardowych.

Filtrowanie elementów na stronach internetowych

Filtrowanie żądań sieciowych to tylko jedna z ważnych części filtrowania treści. Kolejną ważną funkcją jest usuwanie niechcianych treści bezpośrednio ze stron internetowych. Na przykład ponad 40% reguł listy filtrów EasyList określa, jak klienci powinni ukrywać elementy strony.

Można to osiągnąć za pomocą skryptów treści. Skrypty treści działają w kontekście stron internetowych i mogą wprowadzać w nich zmiany za pomocą modelu DOM.

Rozszerzenia do Chrome nie mogą wykonywać kodu hostowanego zdalnie. Nie ma to jednak wpływu na dane z serwera dotyczące elementów do ukrycia, ponieważ są one traktowane jako dane konfiguracyjne. W związku z tym reguły elementów można w razie potrzeby aktualizować w czasie działania programu.

Filtrowanie żądań sieciowych w rozszerzeniach zainstalowanych zgodnie z zasadami

W przypadku zastosowań w firmach i instytucjach edukacyjnych często obowiązują bardzo rygorystyczne wymagania dotyczące filtrowania treści i sieci, np. filtrowania żądań na podstawie ich zawartości. Aby umożliwić te przypadki użycia, rozszerzenia zainstalowane zgodnie z zasadami mają dodatkowy sposób filtrowania i blokowania żądań sieciowych. Korzystając z opcji „blokowanie” w przypadku zdarzeń w interfejsie webRequest API, można wdrożyć automatyczny filtr treści, który wykonuje niestandardową logikę w przypadku każdego żądania, aby zdecydować, czy żądanie powinno zostać zablokowane. Dotyczy to tylko rozszerzeń zainstalowanych przez zasady, ponieważ mają one wyższy poziom zaufania.

Przechwytywanie żądań nawigacji

Żądania nawigacji można filtrować za pomocą reguł deklaratywnego żądania sieciowego. Możesz na przykład pominąć śledzące adresy URL, które przekierowują użytkownika do zamierzonego miejsca docelowego. Jednym ze sposobów na rozwiązanie tego problemu jest przekierowanie żądania nawigacji https://tracker.com?redirect=https%3A%2F%2Fexample.com na stronę rozszerzenia (którą należy skonfigurować jako zasób dostępny w internecie). Następnie strona ta uruchomi skrypt, który wyodrębni miejsce docelowe przekierowania i przekieruje do niego użytkownika za pomocą window.location.replace("https://example.com"), omijając narzędzie do śledzenia linków.