Il existe différentes manières 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 browser.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 des règles de requête réseau déclarative 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 :
- Bloquez une requête réseau.
- Passez à un schéma d'URL sécurisé (http à https ou ws à wss).
- Redirigez une requête réseau.
- Modifier les en-têtes de requête ou de réponse.
Chrome accepte 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 statiques de Declarative Net Request, 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 statiques de requête réseau déclarative. Pour vous donner une idée du nombre de règles que cela représente, la liste de filtres EasyList, utilisée par la plupart des bloqueurs de publicité, se compose d'environ 35 000 règles réseau.
Les règles de requête réseau déclaratives 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 DNR (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ûres : block, allow, allowAllRequests ou upgradeScheme. Même si une règle n'est pas considérée comme sûre (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ûres.
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 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 browser.webRequest et les règles de requête réseau déclaratives dynamiques, il est possible d'analyser les requêtes réseau pour détecter d'éventuelles atteintes à la confidentialité et de les bloquer à l'avenir.
L'approche de base est la suivante :
- Analysez les requêtes Web à l'aide de l'API
browser.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 de requête réseau déclarative 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 se fait 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 UI de configuration de filtre 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 d'une session de navigateur à l'autre et lors des mises à niveau des extensions. Cette approche permet aux utilisateurs d'ajouter jusqu'à 30 000 règles personnalisées.
Filtrer des éléments sur des 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 les contenus indésirables directement des pages Web. Par exemple, plus de 40% des règles de la liste de filtres EasyList définissent la manière dont 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 les modifier à 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 concerné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 la règle
Les cas d'utilisation pour les entreprises et l'éducation ont souvent des exigences extrêmement strictes en matière de filtrage de contenu et de réseau, comme le filtrage des requêtes en fonction de leur contenu. Pour activer ces cas d'utilisation, les extensions installées par les règles disposent d'un moyen supplémentaire de filtrer et de bloquer les requêtes réseau. L'option "blocking" (bloquant) avec les événements de l'API webRequest permet 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 des règles, 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 de requête réseau déclaratives. Par exemple, vous pouvez contourner les URL de suivi qui redirigent l'utilisateur vers la destination prévue. Pour gérer ce problème, 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 Web accessible). Cette page 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.