Inhoud filteren

Er zijn verschillende manieren om inhoud- en netwerkfiltering in Chrome-extensies te implementeren. Deze handleiding biedt een overzicht van de inhoudsfiltermogelijkheden die beschikbaar zijn voor extensies en de verschillende filterbenaderingen, technieken en API's die door Chrome-extensies kunnen worden gebruikt.

Netwerkverzoeken filteren

De belangrijkste manier om netwerkverzoeken in Chrome-extensies te filteren is met behulp van de chrome.declarativeNetRequest API . Met Declarative Net Request kunnen ontwikkelaars netwerkverzoeken blokkeren of wijzigen door declaratieve regels op te geven. De Declarative Net Request-regelindeling is gebaseerd op de mogelijkheden van de filterlijstsyntaxis die door de meeste advertentieblokkers wordt gebruikt.

Deze regels kunnen:

  • Een netwerkverzoek blokkeren.
  • Upgrade het URL-schema naar een veilig schema (http naar https of ws naar wss).
  • Een netwerkverzoek omleiden.
  • Wijzig de headers van verzoeken of antwoorden.

Chrome ondersteunt regels die zijn gebundeld met een extensie, en regels die dynamisch worden bijgewerkt (zoals als reactie op een configuratie op afstand of gebruikersinvoer).

Bundel filterregels met uw extensie

Regels die in uw uitbreidingspakket 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 beschikt Chrome over een wereldwijde gedeelde pool van 300.000 regels die gezamenlijk kunnen worden gebruikt door de set geïnstalleerde extensies. Bovendien krijgt elke uitbreiding een gegarandeerde vergoeding van 30.000 statische regels. Als een gebruiker bijvoorbeeld slechts één extensie voor het filteren van inhoud heeft geïnstalleerd, kan de extensie maximaal 330.000 statische Declarative Net Request-regels gebruiken. Om een ​​idee te krijgen hoeveel regels dit zijn, bestaat de populaire EasyList-filterlijst , die door de meeste adblockers wordt gebruikt, uit zo’n 35.000 netwerkregels.

Statische Declaratieve Net Request-regels kunnen in verschillende regelsets worden georganiseerd. Een extensie kan maximaal 100 statische regelsets specificeren, en 50 van deze regelsets kunnen tegelijk worden ingeschakeld.

Voeg tijdens runtime dynamisch filterregels toe

Sommige regels kunnen niet met de extensie worden gebundeld. In plaats daarvan moeten extensies deze tijdens runtime 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 veilige regels beschouwd: block , allow , allowAllRequests of upgradeScheme . Zelfs als een regel niet als veilig wordt beschouwd (bijvoorbeeld redirect ), kunnen ze nog steeds dynamisch worden toegevoegd, maar met een lagere maximumlimiet van 5.000, die ook meetelt voor de limiet van 30.000 dynamische regels. Om dit in perspectief te plaatsen: 98-99% van de regels in de easylist-filterlijst zijn veilige regels .

Extensies voor het filteren van inhoud kunnen respectievelijk statische en dynamische regels gebruiken om bekende filterregels te bundelen met hun extensie en om hun extensies bij te werken met nieuwe regels voor het filteren van inhoud vanaf hun servers wanneer dat nodig is.

Pas regels aan op basis van waargenomen verzoeken

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

De basisaanpak is:

  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 een dynamische Declarative Net Request-regel voor elk verzoek dat in stap twee is geïdentificeerd, zodat soortgelijke verzoeken in de toekomst worden geblokkeerd.
  3. (Optioneel) Stuur de geïdentificeerde Declarative Net Request-regel terug naar uw server, zodat deze kan worden toegevoegd als een statische Declarative Net Request-regel bij uw volgende extensie-update.

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

Sta gebruikers toe hun eigen filterregels te definiëren

U kunt uw gebruikers hun eigen regels voor het filteren van inhoud laten definiëren door in uw extensie een gebruikersinterface voor filterconfiguratie op te geven. 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, aangezien ze blijven bestaan ​​tijdens browsersessies en extensie-upgrades. Met deze aanpak kunnen gebruikers maximaal 30.000 aangepaste regels toevoegen.

Filterelementen op webpagina's

Het filteren van netwerkverzoeken is slechts een belangrijk onderdeel van het filteren van inhoud. Een ander groot deel is het rechtstreeks verwijderen van ongewenste inhoud van webpagina's. Meer dan 40% van de easylist-filterlijstregels bepaalt bijvoorbeeld hoe klanten pagina-elementen moeten verbergen.

Dit kan worden bereikt met behulp van inhoudsscripts . Inhoudsscripts worden uitgevoerd in de context van webpagina's en kunnen daarin wijzigingen aanbrengen met behulp van de DOM.

Chrome-extensies mogen geen op afstand gehoste code uitvoeren . Gegevens van een server over welke elementen te verbergen worden echter niet beïnvloed, aangezien dit als configuratiegegevens wordt beschouwd. Elementregels kunnen dus tijdens runtime worden bijgewerkt wanneer dat nodig is.

Filter netwerkverzoeken in door beleid geïnstalleerde extensies

Gebruiksscenario's in bedrijven en onderwijs stellen vaak extreem strenge eisen aan inhoud- en netwerkfiltering, zoals het filteren van verzoeken op basis van hun inhoud. Om deze gebruiksscenario's mogelijk te maken, hebben door het beleid geïnstalleerde extensies een extra manier om netwerkverzoeken te filteren en te blokkeren. Met behulp van de optie "blokkeren" met gebeurtenissen in de webRequest API is het mogelijk om een ​​programmatisch inhoudsfilter te implementeren dat op elk verzoek aangepaste logica uitvoert om te beslissen of een verzoek moet worden geblokkeerd of niet. Dit is beperkt tot door het beleid geïnstalleerde extensies, omdat deze een hoger vertrouwensniveau hebben.

Onderschep navigatieverzoeken

Navigatieverzoeken kunnen worden gefilterd met behulp van Declarative Net Request-regels. Mogelijk wilt u bijvoorbeeld tracking-URL's omzeilen die de gebruiker omleiden naar de beoogde bestemming. Eén manier om dit af te handelen is door een navigatieverzoek https://tracker.com?redirect=https%3A%2F%2Fexample.com om te leiden naar een extensiepagina (die moet worden geconfigureerd als een webtoegankelijke bron ), die vervolgens voer een script uit om het omleidingsdoel te extraheren en om te leiden naar de bestemming met behulp van window.location.replace("https://example.com") waarbij de linktracker wordt omzeild.