Inhoud filteren

Er zijn verschillende manieren om content- en netwerkfiltering te implementeren in Chrome-extensies. Deze handleiding geeft een overzicht van de mogelijkheden voor contentfiltering die beschikbaar zijn voor extensies en de verschillende filtermethoden, -technieken en API's die door Chrome-extensies kunnen worden gebruikt.

Netwerkverzoeken filteren

De belangrijkste manier om netwerkverzoeken in Chrome-extensies te filteren, is via de chrome.declarativeNetRequest API . Met DeclarativeNetRequest kunnen ontwikkelaars netwerkverzoeken blokkeren of wijzigen door declaratieve regels op te geven. Het regelformaat van DeclarativeNetRequest is gebaseerd op de mogelijkheden van de filterlijstsyntaxis die door de meeste advertentieblokkers wordt gebruikt.

Deze regels kunnen het volgende doen:

  • Blokkeer een netwerkverzoek.
  • Upgrade het URL-schema naar een beveiligd schema (http naar https of ws naar wss).
  • Een netwerkverzoek omleiden.
  • Wijzig de headers van het verzoek of het antwoord.

Chrome ondersteunt regels die bij een extensie zijn meegeleverd, en regels die dynamisch worden bijgewerkt (bijvoorbeeld als reactie op een externe configuratie of gebruikersinvoer).

Bundel filterregels met uw extensie.

Regels die in uw extensiepakket zijn opgenomen, worden 'statische regels' genoemd. Deze regels worden geïnstalleerd en bijgewerkt wanneer een extensie wordt geïnstalleerd of geüpgraded. Chrome beperkt het aantal statische regels dat een extensie kan declareren.

Voor statische Declarative Net Request-regels heeft Chrome een wereldwijde gedeelde pool van 300.000 regels die gezamenlijk kunnen worden gebruikt door de geïnstalleerde extensies. Daarnaast heeft elke extensie gegarandeerd recht op 30.000 statische regels. Als een gebruiker bijvoorbeeld slechts één extensie voor contentfiltering heeft geïnstalleerd, kan deze extensie tot 330.000 statische Declarative Net Request-regels gebruiken. Om een ​​idee te krijgen van hoeveel regels dit zijn: de populaire EasyList-filterlijst , die door de meeste adblockers wordt gebruikt, bestaat uit ongeveer 35.000 netwerkregels.

Statische declaratieve netwerkverzoekregels kunnen worden georganiseerd in verschillende regelsets. Een extensie kan maximaal 100 statische regelsets specificeren, waarvan er 50 tegelijk actief kunnen zijn.

Voeg dynamisch filterregels toe tijdens de uitvoering.

Sommige regels kunnen niet in de extensie worden opgenomen. In plaats daarvan moeten extensies deze regels tijdens de uitvoering toevoegen. Deze regels worden "dynamische regels" genoemd.

Voor dynamische Declarative Net Request-regels staat Chrome maximaal 30.000 veilige dynamische regels per extensie toe. De meeste regels worden als veilig beschouwd: block , allow , allowAllRequests of upgradeScheme . Zelfs als een regel niet als veilig wordt beschouwd (bijvoorbeeld redirect ), kunnen deze nog steeds dynamisch worden toegevoegd, maar met een lagere maximumlimiet van 5.000, die ook meetellen voor de limiet van 30.000 dynamische regels. Ter vergelijking: 98-99% van de regels in de easylist-filterlijst zijn veilige regels .

Contentfilter-extensies kunnen respectievelijk statische en dynamische regels gebruiken om bekende filterregels in hun extensie te bundelen en om hun extensies indien nodig bij te werken met nieuwe contentfilterregels van hun servers.

Regels aanpassen op basis van waargenomen verzoeken

Het advertentie-ecosysteem is constant in ontwikkeling en contentfilters moeten dienovereenkomstig worden bijgewerkt. Door chrome.webRequest te combineren met dynamische Declarative Net Request-regels is het mogelijk om netwerkverzoeken te analyseren op mogelijke privacyschendingen en deze in de toekomst te blokkeren.

De basisaanpak is als volgt:

  1. Analyseer webverzoeken met behulp van de chrome.webRequest API en probeer automatisch verzoeken te identificeren die niet aan uw privacyvereisten voldoen, bijvoorbeeld met behulp van machine learning.
  2. Maak voor elk verzoek dat in stap twee is geïdentificeerd een dynamische declaratieve netwerkverzoekregel aan, zodat soortgelijke verzoeken in de toekomst worden geblokkeerd.
  3. (Optioneel) Stuur de geïdentificeerde Declarative Net Request-regel terug naar uw server, zodat deze bij uw volgende extensie-update als statische Declarative Net Request-regel kan worden toegevoegd.

Het voordeel van deze aanpak is dat de analyse asynchroon plaatsvindt en de prestaties van de website niet negatief beïnvloedt.

Geef gebruikers de mogelijkheid om hun eigen filterregels te definiëren.

U kunt uw gebruikers hun eigen contentfilterregels laten definiëren door een filterconfiguratie-interface in uw extensie aan te bieden. Converteer deze door de gebruiker gedefinieerde regels naar Declarative Net Request-regels en voeg ze toe als dynamische regels . Deze regels blijven beschikbaar voor gebruikers, omdat ze behouden blijven tijdens browsersessies en extensie-updates. Met deze aanpak kunnen gebruikers tot 30.000 aangepaste regels toevoegen.

Filterelementen op webpagina's

Het filteren van netwerkverzoeken is slechts één belangrijk onderdeel van contentfiltering. Een ander belangrijk onderdeel is het direct verwijderen van ongewenste content van webpagina's. Zo definieert bijvoorbeeld meer dan 40% van de filterregels in EasyList hoe clients pagina-elementen moeten verbergen.

Dit kan worden bereikt met behulp van content scripts . Content scripts worden uitgevoerd in de context van webpagina's en kunnen deze wijzigen met behulp van het DOM.

Chrome-extensies mogen geen code uitvoeren die op een externe server wordt gehost . Gegevens van een server over welke elementen verborgen moeten worden, worden echter niet beïnvloed, omdat dit als configuratiegegevens wordt beschouwd. Elementregels kunnen daarom indien nodig tijdens de uitvoering worden bijgewerkt.

Filter netwerkverzoeken in beleidsgeïnstalleerde extensies.

Zakelijke en educatieve toepassingen stellen vaak zeer strenge eisen aan content- en netwerkfiltering, zoals het filteren van verzoeken op basis van hun inhoud. Om deze toepassingen mogelijk te maken, bieden via beleid geïnstalleerde extensies een extra manier om netwerkverzoeken te filteren en te blokkeren. Door de optie "blocking" te gebruiken met gebeurtenissen in de webRequest API, is het mogelijk om een ​​programmatisch contentfilter te implementeren dat aangepaste logica uitvoert op elk verzoek om te bepalen of een verzoek moet worden geblokkeerd of niet. Dit is beperkt tot via beleid geïnstalleerde extensies, omdat deze een hoger vertrouwensniveau hebben.

Navigatieverzoeken onderscheppen

Navigatieverzoeken kunnen worden gefilterd met behulp van Declarative Net Request-regels. U wilt bijvoorbeeld mogelijk tracking-URL's omzeilen die de gebruiker doorverwijzen naar de beoogde bestemming. Een manier om dit te doen is door een navigatieverzoek https://tracker.com?redirect=https%3A%2F%2Fexample.com door te verwijzen naar een extensiepagina (die moet worden geconfigureerd als een webtoegankelijke bron ). Deze pagina voert vervolgens een script uit om het doorverwijsdoel te extraheren en door te verwijzen naar de bestemming met behulp van window.location.replace("https://example.com") waarmee de linktracker wordt omzeild.