Il existe différentes façons d'implémenter le filtrage de contenu et de réseau dans les extensions Chrome. Ce guide présente les fonctionnalités de filtrage de contenu disponibles pour les extensions, ainsi que les différentes approches, techniques et API de filtrage que les extensions Chrome peuvent utiliser.
Filtrer les requêtes réseau
La principale façon de filtrer les requêtes réseau dans les extensions Chrome consiste à utiliser l'API chrome.declarativeNetRequest. Avec Declarative Net Request, les développeurs peuvent bloquer ou modifier les requêtes réseau en spécifiant des règles déclaratives. Le format de règle Declarative Net Request est basé sur les fonctionnalités de la syntaxe de la liste de filtres utilisée par la plupart des bloqueurs de publicité.
Ces règles peuvent :
- bloquer une requête réseau ;
- mettre à niveau le schéma d'URL vers un schéma sécurisé (http vers https ou ws vers wss) ;
- rediriger une requête réseau ;
- modifier les en-têtes de requête ou de réponse.
Chrome est compatible avec les règles fournies avec une extension et celles mises à jour de manière dynamique (par exemple, en réponse à une configuration à distance ou à une entrée utilisateur).
Regrouper les règles de filtrage avec votre extension
Les règles incluses dans votre package d'extension sont appelées "règles statiques". Ces règles sont installées et mises à jour lorsqu'une extension est installée ou mise à niveau. Chrome limite le nombre de règles statiques qu'une extension peut déclarer.
Pour les règles Declarative Net Request statiques, Chrome dispose d'un pool partagé global de 300 000 règles qui peuvent être utilisées conjointement par l'ensemble des extensions installées. De plus, chaque extension est garantie d'une allocation de 30 000 règles statiques. Par exemple, si un utilisateur n'a installé qu'une seule extension de filtrage de contenu, celle-ci peut utiliser jusqu'à 330 000 règles Declarative Net Request statiques. Pour vous donner une idée du nombre de règles, la liste de filtres populaire EasyList, utilisée par la plupart des bloqueurs de publicité, comprend environ 35 000 règles réseau.
Les règles Declarative Net Request statiques peuvent être organisées en différents ensembles de règles. Une extension peut spécifier jusqu'à 100 ensembles de règles statiques, dont 50 peuvent être activés à la fois.
Ajouter des règles de filtrage de manière dynamique au moment de l'exécution
Certaines règles ne peuvent pas être regroupées avec l'extension. Les extensions doivent plutôt les ajouter au moment de l'exécution. Ces règles sont appelées "règles dynamiques".
Pour les règles Declarative Net Request dynamiques, Chrome autorise un maximum de 30 000 règles dynamiques sécurisées par extension. La plupart des règles sont considérées comme sécurisées : block, allow, allowAllRequests ou upgradeScheme. Même si une règle n'est pas considérée comme sécurisée (par exemple, redirect), elle peut toujours être ajoutée de manière dynamique,mais avec une limite maximale inférieure de 5 000,qui est également prise en compte dans la limite de 30 000 règles dynamiques. Pour mettre cela en perspective, 98 à 99% des règles de la liste de filtres EasyList sont des règles sécurisées.
Les extensions de filtrage de contenu peuvent utiliser des règles statiques et dynamiques respectivement pour regrouper les règles de filtrage connues avec leur extension et pour mettre à jour leurs extensions avec de nouvelles règles de filtrage de contenu à partir de leurs serveurs chaque fois que cela est nécessaire.
Adapter les règles en fonction des requêtes observées
L'écosystème publicitaire évolue constamment et les filtres de contenu doivent être mis à jour en conséquence. En combinant chrome.webRequest et les règles Declarative Net Request dynamiques, il est possible d'analyser les requêtes réseau pour détecter d'éventuelles violations de la confidentialité et les bloquer à l'avenir.
L'approche de base est la suivante :
- Analysez les requêtes Web à l'aide de l'API
chrome.webRequestet essayez d'identifier automatiquement les requêtes qui ne répondent pas à vos exigences en matière de confidentialité, par exemple à l'aide du machine learning. - Créez une règle Declarative Net Request dynamique pour chaque requête identifiée à l'étape 2 afin que les requêtes similaires soient bloquées à l'avenir.
- (Facultatif) Renvoyez la règle Declarative Net Request identifiée à votre serveur afin qu'elle puisse être ajoutée en tant que règle Declarative Net Request statique lors de la prochaine mise à jour de votre extension.
L'avantage de cette approche est que l'analyse s'effectue de manière asynchrone et n'affecte pas négativement les performances du site Web.
Autoriser les utilisateurs à définir leurs propres règles de filtrage
Vous pouvez autoriser vos utilisateurs à définir leurs propres règles de filtrage de contenu en fournissant une interface utilisateur de configuration des filtres dans votre extension. Convertissez ces règles définies par l'utilisateur en règles Declarative Net Request et ajoutez-les en tant que règles dynamiques. Ces règles resteront disponibles pour les utilisateurs, car elles persistent dans les sessions de navigateur et les mises à niveau des extensions. Grâce à cette approche, les utilisateurs peuvent ajouter jusqu'à 30 000 règles personnalisées.
Filtrer les éléments sur les pages Web
Le filtrage des requêtes réseau n'est qu'une partie importante du filtrage de contenu. Une autre partie importante consiste à supprimer le contenu indésirable directement des pages Web. Par exemple, plus de 40% des règles de la liste de filtres EasyList définissent comment les clients doivent masquer les éléments de page.
Pour ce faire, vous pouvez utiliser des scripts de contenu. Les scripts de contenu s'exécutent dans le contexte des pages Web et peuvent y apporter des modifications à l'aide du DOM.
Les extensions Chrome ne sont pas autorisées à exécuter du code hébergé à distance. Toutefois, les données d'un serveur concernant les éléments à masquer ne sont pas affectées, car elles sont considérées comme des données de configuration. Par conséquent, les règles d'élément peuvent être mises à jour au moment de l'exécution si nécessaire.
Filtrer les requêtes réseau dans les extensions installées par une règle
Les cas d'utilisation en entreprise et dans l'éducation ont souvent des exigences extrêmement strictes en matière de filtrage de contenu et de réseau, par exemple le filtrage des requêtes en fonction de leur contenu. Pour activer ces cas d'utilisation, les extensions installées par une règle disposent d'un moyen supplémentaire de filtrer et de bloquer les requêtes réseau. En utilisant l'option "blocking" avec des événements dans l'API webRequest, il est possible d'implémenter un filtre de contenu programmatique qui exécute une logique personnalisée sur chaque requête pour déterminer si elle doit être bloquée ou non. Cette fonctionnalité est limitée aux extensions installées par une règle, car elles bénéficient d'un niveau de confiance plus élevé.
Intercepter les requêtes de navigation
Les requêtes de navigation peuvent être filtrées à l'aide de règles Declarative Net Request. Par exemple, vous pouvez contourner les URL de suivi qui redirigent l'utilisateur vers la destination souhaitée. Pour ce faire, vous pouvez rediriger une requête de navigation https://tracker.com?redirect=https%3A%2F%2Fexample.com vers une page d'extension (qui doit être configurée en tant que ressource accessible sur le Web), qui exécutera ensuite un script pour extraire la cible de redirection et rediriger vers la destination à l'aide de window.location.replace("https://example.com"), en contournant le suivi des liens.