Filtrage du contenu

Il existe différentes manières d'implémenter le filtrage du contenu et du réseau dans les extensions Chrome. Ce guide présente les fonctionnalités de filtrage du contenu disponibles pour les extensions, ainsi que les différentes approches, techniques et API de filtrage pouvant être utilisées par les extensions Chrome.

Filtrer les requêtes réseau

Le principal moyen 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 la règle de requête nette déclarative repose sur les capacités de la syntaxe de la liste de filtrage utilisée par la plupart des bloqueurs de publicité.

Ces règles permettent d'effectuer les opérations suivantes:

  • Bloquez une requête réseau.
  • Mettez à niveau le schéma d'URL vers un schéma sécurisé (http vers https ou ws vers wss).
  • Redirigez une requête réseau.
  • Modifiez 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 lors de l'installation ou de la mise à niveau d'une extension. Chrome limite le nombre de règles statiques qu'une extension peut déclarer.

Pour les règles statiques 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 autorisée à utiliser 30 000 règles statiques. Par exemple, si un utilisateur n'a installé qu'une seule extension de filtrage de contenu, cette extension peut utiliser jusqu'à 330 000 règles statiques de requête net déclarative. Pour vous faire une idée du nombre de règles concernées, la liste de filtrage EasyList, utilisée par la plupart des bloqueurs de publicité, comprend environ 35 000 règles de réseau.

Les règles de requête nette déclarative statique peuvent être organisées en différents ensembles de règles. Une extension peut spécifier jusqu'à 100 ensembles de règles statiques, et 50 de ces ensembles de règles peuvent être activés à la fois.

Ajouter dynamiquement des règles de filtrage au moment de l'exécution

Certaines règles ne peuvent pas être regroupées avec l'extension. Les extensions doivent les ajouter au moment de l'exécution. Ces règles sont appelées "règles dynamiques".

Pour les règles dynamiques Declarative Net Request, 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), vous pouvez toujours l'ajouter de manière dynamique,mais avec une limite maximale inférieure (5 000), qui est également comptabilisée dans la limite des 30 000 règles dynamiques. Pour vous donner une idée, 98 à 99% des règles de la liste de filtres de la liste de contrôle sont sûres.

Les extensions de filtrage du 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 ces dernières avec de nouvelles règles de filtrage de contenu à partir de leurs serveurs si nécessaire.

Adapter les règles en fonction des requêtes observées

L'écosystème publicitaire est en constante évolution et les filtres de contenu doivent être mis à jour en conséquence. En combinant les règles chrome.webRequest et les règles de requête nette déclarative dynamique, vous pouvez analyser les requêtes réseau afin d'identifier d'éventuels cas de non-respect de la confidentialité et les bloquer à l'avenir.

L'approche de base est la suivante:

  1. Analysez les requêtes Web à l'aide de l'API chrome.webRequest et essayez d'identifier automatiquement celles qui ne répondent pas à vos exigences de confidentialité, par exemple à l'aide du machine learning.
  2. Créez une règle de requête nette déclarative dynamique pour chaque requête identifiée à l'étape 2 afin que des requêtes similaires soient bloquées à l'avenir.
  3. (Facultatif) Renvoyez la règle de requête nette déclarative identifiée à votre serveur afin qu'elle puisse être ajoutée en tant que règle de requête nette déclarative statique lors de la prochaine mise à jour de l'extension.

L'avantage de cette approche est que l'analyse s'effectue de manière asynchrone et n'a aucune incidence négative sur les performances du site Web.

Autoriser les utilisateurs à définir leurs propres règles de filtrage

Vous pouvez permettre à vos utilisateurs de définir leurs propres règles de filtrage du contenu en fournissant une interface utilisateur de configuration du filtre dans votre extension. Convertissez ces règles définies par l'utilisateur en règles de requête nette déclarative, puis ajoutez-les en tant que règles dynamiques. Ces règles resteront disponibles pour les utilisateurs, car elles sont conservées entre les sessions de navigateur et les mises à niveau des extensions. Ainsi, 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 ne représente qu'une partie importante du filtrage de contenu. Un autre aspect important consiste à supprimer le contenu indésirable directement des pages Web. Par exemple, plus de 40% des règles de la liste de filtres de l'easylist définissent la façon dont les clients doivent masquer les éléments de la page.

Pour ce faire, utilisez des scripts de contenu. Les scripts de contenu s'exécutent dans le contexte de 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 affectées, car elles sont considérées comme des données de configuration. Par conséquent, les règles des éléments peuvent être mises à jour au moment de l'exécution si nécessaire.

Filtrer les requêtes réseau dans les extensions installées en vertu des règles

Les cas d'utilisation dans les entreprises et les établissements d'enseignement sont souvent soumis à des exigences extrêmement strictes en termes de filtrage de contenu et de réseau, par exemple pour filtrer les demandes en fonction de leur contenu. Pour permettre ces cas d'utilisation, les extensions installées via des règles disposent d'un moyen supplémentaire de filtrer et de bloquer les requêtes réseau. En utilisant l'option de "blocage" avec les événements de l'API webRequest, il est possible d'implémenter un filtre de contenu programmatique qui exécute une logique personnalisée à chaque requête pour décider si une requête doit être bloquée ou non. Cette option est limitée aux extensions installées par des règles, car elles sont plus fiables.

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 ignorer les URL de suivi qui redirigent l'utilisateur vers la destination souhaitée. Pour gérer cela, 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écute ensuite un script pour extraire la cible de la redirection et rediriger vers la destination à l'aide de window.location.replace("https://example.com") contournant l'outil de suivi des liens.