Há maneiras diferentes de implementar a filtragem de conteúdo e de rede nas extensões do Google Chrome. Este guia fornece uma visão geral dos recursos de filtragem de conteúdo disponíveis para extensões e das diferentes abordagens de filtragem, técnicas e APIs 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 API chrome.declarativeNetRequest
. Com a solicitação de rede declarativa, os desenvolvedores podem bloquear ou modificar solicitações de rede especificando regras declarativas. O formato da 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 são capazes de:
- Bloquear uma solicitação de rede.
- Faça upgrade do esquema de URL para um esquema seguro (http para https ou ws para wss).
- Redirecione uma solicitação de rede.
- Modifique os cabeçalhos de solicitação ou resposta.
O Chrome é compatível com regras agrupadas em extensões e 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 o número de regras estáticas que 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 a garantia de um 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, a extensão poderá usar até 330.000 regras estáticas de solicitação de rede declarativa. Para ter uma ideia de quantas regras existem, a famosa lista de filtros EasyList, usada pela maioria dos bloqueadores de anúncios, consiste em cerca de 35.000 regras de rede.
As regras de solicitação de rede declarativa estática podem ser organizadas em diferentes conjuntos de regras. Uma extensão pode especificar até 100 conjuntos de regras estáticos, e 50 deles podem ser ativados de uma vez.
Adicione regras de filtro dinamicamente no momento da execução
Algumas regras não podem ser agrupadas com a extensão. Em vez disso, as extensões precisam adicioná-las no momento da execução. Elas são chamadas de "regras dinâmicas".
Para regras de solicitação líquida dinâmica e declarativa, o Chrome permite no máximo 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 poderá ser adicionada dinamicamente,mas com um limite máximo menor de 5.000,que também é contabilizado no limite de 30.000 regras dinâmicas. Para você ter uma ideia, 98 a 99% das regras na lista de filtros da lista fácil são 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 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 as regras chrome.webRequest
e as regras de solicitação de rede declarativa dinâmica, é 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.webRequest
e tente identificar automaticamente aquelas que não atendem aos seus requisitos de privacidade, por exemplo, usando aprendizado de máquina. - Crie uma regra de solicitação líquida declarativa dinâmica para cada solicitação identificada na etapa 2. Assim, solicitações semelhantes serão bloqueadas no futuro.
- (Opcional) Envie 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 na próxima atualização da extensão.
A vantagem dessa abordagem é que a análise é 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 sua 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 vão continuar disponíveis para os usuários durante as sessões do navegador e os upgrades de extensões. Com 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 grande parte é a remoção de conteúdo indesejado diretamente das páginas da Web. Por exemplo, mais de 40% das regras de lista de filtros de lista fácil definem como os clientes devem ocultar elementos de página.
Para isso, use scripts de conteúdo. Scripts de conteúdo são executados no contexto de páginas da Web e podem fazer alterações nelas usando o DOM.
As extensões do Chrome não têm permissão para executar códigos hospedados 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 do elemento podem ser atualizadas no tempo de execução sempre que necessário.
Filtrar solicitações de rede em extensões instaladas de políticas
Os casos de uso empresariais e educacionais geralmente têm requisitos extremamente rígidos 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 de políticas têm outra maneira de filtrar e bloquear solicitações de rede. Usando a opção de "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 pela política porque elas têm um nível mais alto de confiança.
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 os URLs de rastreamento que redirecionam o usuário para o destino pretendido. Uma abordagem para lidar com isso é redirecionar um pedido 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 pela Web), que vai executar um script para extrair o destino do redirecionamento e redirecionar para o destino usando window.location.replace("https://example.com")
contornando o rastreador de links.