Filtrowanie treści

Istnieją różne sposoby implementowania filtrowania treści i sieci w rozszerzeniach do Chrome. W tym przewodniku znajdziesz omówienie funkcji filtrowania treści dostępnych w rozszerzeniach oraz różnych podejść, technik i interfejsów API, których mogą używać rozszerzenia do Chrome.

Filtrowanie żądań sieciowych

Podstawowym sposobem filtrowania żądań sieciowych w rozszerzeniach do Chrome jest używanie interfejsu chrome.declarativeNetRequest API. Dzięki deklaratywnemu żądaniu sieci deweloperzy mogą blokować lub modyfikować żądania sieciowe, określając reguły deklaratywne. Format reguły deklaratywnego żądania sieci jest oparty na możliwościach składni listy filtrów używanej przez większość programów do blokowania reklam.

Te reguły mogą:

  • blokować żądanie sieciowe,
  • zmieniać schemat URI adresu URL na bezpieczny (http na https lub ws na wss),
  • przekierowywać żądanie sieciowe,
  • modyfikować nagłówki żądań lub odpowiedzi.

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

Dołączanie reguł filtrowania do rozszerzenia

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

W przypadku statycznych reguł deklaratywnego żądania sieci Chrome ma globalną pulę współdzieloną 300 tys. reguł, które mogą być używane wspólnie przez zestaw zainstalowanych rozszerzeń. Ponadto każde rozszerzenie ma gwarantowany limit 30 tys. reguł statycznych. Jeśli np. użytkownik ma zainstalowane tylko 1 rozszerzenie do filtrowania treści, może ono używać maksymalnie 330 tys. statycznych reguł deklaratywnego żądania sieci. Aby zorientować się, ile to reguł, popularna lista filtrów EasyList, używana przez większość programów do blokowania reklam,zawiera około 35 tys. reguł sieciowych.

Statyczne reguły deklaratywnego żądania sieci można uporządkować w różne zestawy reguł. Rozszerzenie może określić 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 dołączyć do rozszerzenia. Zamiast tego rozszerzenia muszą je dodawać w czasie działania. Te reguły są nazywane „regułami dynamicznymi”.

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

Rozszerzenia do filtrowania treści mogą używać odpowiednio reguł statycznych i dynamicznych, aby dołączać znane reguły filtrowania do rozszerzenia 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 chrome.webRequest i dynamiczne reguły deklaratywnego żądania sieci, można analizować żądania sieciowe pod kątem potencjalnych naruszeń prywatności i blokować je w przyszłości.

Podstawowe podejście:

  1. Analizuj żądania sieciowe za pomocą interfejsu chrome.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 sieci dla każdego żądania zidentyfikowanego w kroku 2, aby podobne żądania były blokowane w przyszłości.
  3. (Opcjonalnie) Wyślij zidentyfikowaną regułę deklaratywnego żądania sieci z powrotem na serwer, aby można ją było dodać jako statyczną regułę deklaratywnego żądania sieci w 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 pozwolić użytkownikom definiować własne reguły filtrowania treści, udostępniając w rozszerzeniu interfejs konfiguracji filtrów. Przekonwertuj te reguły zdefiniowane przez użytkownika na reguły deklaratywnego żądania sieci 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 aktualizacjach rozszerzeń. Dzięki temu podejściu użytkownicy mogą dodać maksymalnie 30 tys. reguł niestandardowych.

Filtrowanie elementów na stronach internetowych

Filtrowanie żądań sieciowych to tylko jedna ważna część filtrowania treści. Kolejną ważną częścią jest usuwanie niechcianych treści bezpośrednio ze stron internetowych. Na przykład ponad 40% reguł na liście 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ą DOM.

Rozszerzenia do Chrome nie mogą wykonywać kodu hostowanego zdalnie. Nie dotyczy to jednak danych z serwera o tym, które elementy mają być ukryte, ponieważ są one traktowane jako dane konfiguracyjne. Dlatego reguły elementów można w razie potrzeby aktualizować w czasie działania.

Filtrowanie żądań sieciowych w rozszerzeniach zainstalowanych przez zasady

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 treści. Aby umożliwić takie zastosowania, rozszerzenia zainstalowane przez zasady mają dodatkowy sposób filtrowania i blokowania żądań sieciowych. Używając opcji „blocking” (blokowanie) z wydarzeniami w interfejsie webRequest API, można zaimplementować programowy filtr treści, który wykonuje niestandardową logikę dla każdego żądania, aby zdecydować, czy żądanie ma zostać zablokowane. Jest to ograniczone do rozszerzeń zainstalowanych przez zasady, ponieważ mają one wyższy poziom zaufania.

Przechwytywanie żądań nawigacji

Żądania nawigacji można filtrować za pomocą reguł deklaratywnego żądania sieci. Możesz na przykład chcieć pominąć linki monitorujące, które przekierowują użytkownika do zamierzonego miejsca docelowego. Jednym ze sposobów na to jest przekierowanie żądania nawigacji https://tracker.com?redirect=https%3A%2F%2Fexample.com na stronę rozszerzenia (którą trzeba skonfigurować jako zasób dostępny w internecie), która następnie uruchomi skrypt, aby wyodrębnić miejsce docelowe przekierowania i przekierować do niego za pomocą window.location.replace("https://example.com"), omijając narzędzie do śledzenia linków.