Há diferentes maneiras de implementar a filtragem de conteúdo e de rede nas extensões do Chrome. Este guia oferece uma visão geral dos recursos de filtragem de conteúdo disponíveis para extensões e das diferentes abordagens, técnicas e APIs de filtragem que podem ser usadas pelas extensões do Chrome.
Filtrar solicitações de rede
A principal maneira de filtrar solicitações de rede nas extensões do Chrome é usando a chrome.declarativeNetRequest API. Com a solicitação de rede declarativa, os desenvolvedores podem bloquear ou modificar solicitações de rede especificando regras declarativas. O formato de regra de solicitação de rede declarativa é baseado nos recursos da sintaxe da lista de filtros usada pela maioria dos bloqueadores de anúncios.
Essas regras podem:
- Bloquear uma solicitação de rede.
- Fazer upgrade do esquema de URL para um esquema seguro (http para https ou ws para wss).
- Redirecionar uma solicitação de rede.
- Modificar cabeçalhos de solicitação ou resposta.
O Chrome oferece suporte a regras agrupadas com uma extensão e aquelas atualizadas dinamicamente (por exemplo, em resposta a uma configuração remota ou entrada do usuário).
Agrupar regras de filtro com sua extensão
As regras incluídas no pacote de extensão são chamadas de "regras estáticas". Essas regras são instaladas e atualizadas quando uma extensão é instalada ou atualizada. O Chrome limita quantas regras estáticas uma extensão pode declarar.
Para regras estáticas de solicitação de rede declarativa, o Chrome tem um pool compartilhado global de 300.000 regras que podem ser usadas em conjunto pelo conjunto de extensões instaladas. Além disso, cada extensão tem uma permissão de 30.000 regras estáticas. Por exemplo, se um usuário tiver apenas uma extensão de filtragem de conteúdo instalada, ela poderá usar até 330.000 regras estáticas de solicitação de rede declarativa. Para ter uma ideia de quantas regras são, a lista de filtros popular do EasyList, usada pela maioria dos bloqueadores de anúncios, consiste em cerca de 35.000 regras de rede.
As regras estáticas de solicitação de rede declarativa podem ser organizadas em diferentes conjuntos de regras. Uma extensão pode especificar até 100 conjuntos de regras estáticas, e 50 deles podem ser ativados por vez.
Adicionar regras de filtro dinamicamente no tempo de execução
Algumas regras não podem ser agrupadas com a extensão. Em vez disso, as extensões precisam adicioná-las no tempo de execução. Essas regras são chamadas de "regras dinâmicas".
Para regras dinâmicas de solicitação de rede declarativa, o Chrome permite um máximo de 30.000 regras dinâmicas seguras por extensão. A maioria das regras é considerada segura: block, allow, allowAllRequests ou upgradeScheme. Mesmo que uma regra não seja considerada segura (por exemplo, redirect), ela ainda pode ser adicionada dinamicamente,mas com um limite máximo menor de 5.000,que também conta para o limite de 30.000 regras dinâmicas. Para colocar isso em perspectiva, 98 a 99% das regras na lista de filtros do EasyList são regras seguras.
As extensões de filtragem de conteúdo podem usar regras estáticas e dinâmicas, respectivamente, para agrupar regras de filtragem conhecidas com a extensão e para atualizar as extensões com novas regras de filtragem de conteúdo dos servidores sempre que necessário.
Adaptar regras com base em solicitações observadas
O ecossistema de anúncios está em constante evolução, e os filtros de conteúdo precisam ser atualizados de acordo. Ao combinar chrome.webRequest e regras dinâmicas de solicitação de rede declarativa, é possível analisar solicitações de rede em busca de possíveis violações de privacidade e bloqueá-las no futuro.
A abordagem básica é:
- Analise solicitações da web usando a API
chrome.webRequeste tente identificar automaticamente as solicitações que não atendem às normas de privacidade, por exemplo, usando o aprendizado de máquina. - Criar uma regra dinâmica de solicitação de rede declarativa para cada solicitação identificada na etapa dois para que solicitações semelhantes sejam bloqueadas no futuro.
- (Opcional) Enviar a regra de solicitação de rede declarativa identificada de volta ao servidor para que ela possa ser adicionada como uma regra estática de solicitação de rede declarativa com a próxima atualização da extensão.
O benefício dessa abordagem é que a análise acontece de forma assíncrona e não afeta negativamente a performance do site.
Permitir que os usuários definam as próprias regras de filtragem
Você pode permitir que os usuários definam as próprias regras de filtragem de conteúdo fornecendo uma interface de configuração de filtro na extensão. Converta essas regras definidas pelo usuário em regras de solicitação de rede declarativa e adicione-as como regras dinâmicas. Essas regras continuarão disponíveis para os usuários, já que persistem nas sessões do navegador e nas atualizações de extensão. Usando essa abordagem, os usuários podem adicionar até 30.000 regras personalizadas.
Filtrar elementos em páginas da Web
A filtragem de solicitações de rede é apenas uma parte importante da filtragem de conteúdo. Outra parte importante é remover conteúdo indesejado diretamente das páginas da Web. Por exemplo, mais de 40% das regras da lista de filtros do EasyList definem como os clientes devem ocultar elementos da página.
Isso pode ser feito usando scripts de conteúdo. Os scripts de conteúdo são executados no contexto de páginas da Web e podem fazer mudanças nelas usando o DOM.
As extensões do Chrome não podem executar código hospedado remotamente. No entanto, os dados de um servidor sobre quais elementos ocultar não são afetados, já que são considerados dados de configuração. Portanto, as regras de elementos podem ser atualizadas no tempo de execução sempre que necessário.
Filtrar solicitações de rede em extensões instaladas por política
Os casos de uso corporativos e educacionais geralmente têm requisitos extremamente rigorosos para filtragem de conteúdo e de rede, como filtrar solicitações com base no conteúdo. Para ativar esses casos de uso, as extensões instaladas por política têm outra maneira de filtrar e bloquear solicitações de rede. Usando a opção "bloqueio" com eventos na API webRequest, é possível implementar um filtro de conteúdo programático que executa uma lógica personalizada em cada solicitação para decidir se uma solicitação deve ser bloqueada ou não. Isso é restrito a extensões instaladas por política, já que elas têm um nível de confiança mais alto.
Interceptar solicitações de navegação
As solicitações de navegação podem ser filtradas usando regras de solicitação de rede declarativa. Por exemplo, talvez você queira ignorar URLs de rastreamento que redirecionam o usuário para o destino pretendido. Uma abordagem para lidar com isso é redirecionar uma solicitação de navegação https://tracker.com?redirect=https%3A%2F%2Fexample.com para uma página de extensão (que precisa ser configurada como um recurso acessível à Web), que vai executar um script para extrair o destino de redirecionamento e redirecionar para o destino usando window.location.replace("https://example.com"), contornando o rastreador de links.