Existen diferentes formas de implementar el filtrado de contenido y de red en las extensiones de Chrome. En esta guía, se proporciona una descripción general de las capacidades de filtrado de contenido disponibles para las extensiones y los diferentes enfoques, técnicas y APIs de filtrado que pueden usar las extensiones de Chrome.
Cómo filtrar solicitudes de red
La principal forma de filtrar solicitudes de red en las extensiones de Chrome es usar la API de browser.declarativeNetRequest. Con Declarative Net Request, los desarrolladores pueden bloquear o modificar solicitudes de red especificando reglas declarativas. El formato de regla de Declarative Net Request se basa en las capacidades de la sintaxis de la lista de filtros que utilizan la mayoría de los bloqueadores de anuncios.
Estas reglas pueden hacer lo siguiente:
- Bloquea una solicitud de red.
- Actualiza el esquema de URL a un esquema seguro (de http a https o de ws a wss).
- Redirige una solicitud de red.
- Modificar los encabezados de solicitud o respuesta
Chrome admite reglas incluidas en una extensión y aquellas que se actualizan de forma dinámica (por ejemplo, en respuesta a una configuración remota o a la entrada del usuario).
Agrupa las reglas de filtro con tu extensión
Las reglas incluidas en tu paquete de extensión se denominan "reglas estáticas". Estas reglas se instalan y actualizan cuando se instala o actualiza una extensión. Chrome limita la cantidad de reglas estáticas que puede declarar una extensión.
En el caso de las reglas estáticas de Declarative Net Request, Chrome tiene un grupo compartido global de 300,000 reglas que pueden usar en conjunto el conjunto de extensiones instaladas. Además, cada extensión tiene garantizada una asignación de 30,000 reglas estáticas. Por ejemplo, si un usuario solo tiene instalada una extensión de filtrado de contenido, esta puede usar hasta 330,000 reglas estáticas de Declarative Net Request. Para que te hagas una idea de la cantidad de reglas que esto implica, la popular lista de filtros EasyList, que usan la mayoría de los bloqueadores de anuncios, consta de alrededor de 35,000 reglas de red.
Las reglas de Static Declarative Net Request se pueden organizar en diferentes conjuntos de reglas. Una extensión puede especificar hasta 100 conjuntos de reglas estáticos, y se pueden habilitar 50 de estos conjuntos de reglas a la vez.
Cómo agregar reglas de filtro de forma dinámica en el tiempo de ejecución
Algunas reglas no se pueden incluir en el paquete de la extensión. En cambio, las extensiones deben agregarlos durante el tiempo de ejecución. Estas reglas se denominan "reglas dinámicas".
En el caso de las reglas dinámicas de Declarative Net Request, Chrome permite un máximo de 30,000 reglas dinámicas seguras por extensión. La mayoría de las reglas se consideran seguras: block, allow, allowAllRequests o upgradeScheme. Incluso si una regla no se considera segura (por ejemplo, redirect), se puede agregar de forma dinámica, pero con un límite máximo inferior de 5,000, que también se incluye en el límite de 30,000 reglas dinámicas. Para poner esto en perspectiva, entre el 98% y el 99% de las reglas de la lista de filtros de EasyList son reglas seguras.
Las extensiones de filtrado de contenido pueden usar reglas estáticas y dinámicas, respectivamente, para incluir reglas de filtrado conocidas en su extensión y actualizar sus extensiones con nuevas reglas de filtrado de contenido desde sus servidores cuando sea necesario.
Adaptar las reglas según las solicitudes observadas
El ecosistema de la publicidad evoluciona constantemente, y los filtros de contenido deben actualizarse en consecuencia. Si se combinan browser.webRequest y las reglas dinámicas de Declarative Net Request, es posible analizar las solicitudes de red en busca de posibles incumplimientos de la privacidad y bloquearlos en el futuro.
El enfoque básico es el siguiente:
- Analiza las solicitudes web con la API de
browser.webRequesty trata de identificar automáticamente las solicitudes que no cumplen con tus requisitos de privacidad, por ejemplo, con el aprendizaje automático. - Crea una regla de Declarative Net Request dinámica para cada solicitud que se identificó en el paso dos, de modo que se bloqueen las solicitudes similares en el futuro.
- (Opcional) Envía la regla de Declarative Net Request identificada a tu servidor para que se pueda agregar como una regla estática de Declarative Net Request con la próxima actualización de la extensión.
El beneficio de este enfoque es que el análisis se realiza de forma asíncrona y no afectará negativamente el rendimiento del sitio web.
Permitir que los usuarios definan sus propias reglas de filtrado
Puedes permitir que los usuarios definan sus propias reglas de filtrado de contenido proporcionando una IU de configuración de filtros en tu extensión. Convierte estas reglas definidas por el usuario en reglas de Declarative Net Request y agrégalas como reglas dinámicas. Estas reglas seguirán disponibles para los usuarios, ya que persisten en las sesiones del navegador y en las actualizaciones de extensiones. Con este enfoque, los usuarios pueden agregar hasta 30,000 reglas personalizadas.
Filtrar elementos en páginas web
Filtrar las solicitudes de red es solo una parte importante del filtrado de contenido. Otra parte importante es quitar el contenido no deseado directamente de las páginas web. Por ejemplo, más del 40% de las reglas de la lista de filtros de EasyList definen cómo los clientes deben ocultar los elementos de la página.
Esto se puede lograr con secuencias de comandos de contenido. Las secuencias de comandos de contenido se ejecutan en el contexto de las páginas web y pueden realizar cambios en ellas con el DOM.
Las extensiones de Chrome no pueden ejecutar código alojado de forma remota. Sin embargo, los datos de un servidor sobre qué elementos ocultar no se ven afectados, ya que se consideran datos de configuración. Por lo tanto, las reglas de elementos se pueden actualizar en el tiempo de ejecución cuando sea necesario.
Cómo filtrar solicitudes de red en extensiones instaladas por políticas
Los casos de uso empresariales y educativos suelen tener requisitos extremadamente estrictos para el filtrado de contenido y de red, como el filtrado de solicitudes según su contenido. Para habilitar estos casos de uso, las extensiones instaladas por políticas tienen una forma adicional de filtrar y bloquear solicitudes de red. Con la opción "bloqueo" de los eventos en la API de webRequest, es posible implementar un filtro de contenido programático que ejecute lógica personalizada en cada solicitud para decidir si se debe bloquear o no. Esto se restringe a las extensiones instaladas por políticas, ya que tienen un mayor nivel de confianza.
Intercepta solicitudes de navegación
Las solicitudes de navegación se pueden filtrar con reglas de Declarative Net Request. Por ejemplo, es posible que desees omitir las URLs de seguimiento que redireccionan al usuario a su destino previsto. Un enfoque para controlar esto es redireccionar una solicitud de navegación https://tracker.com?redirect=https%3A%2F%2Fexample.com a una página de extensión (que debe configurarse como un recurso accesible para la Web), que luego ejecutará una secuencia de comandos para extraer el destino del redireccionamiento y redireccionar al destino con window.location.replace("https://example.com"), lo que evita el rastreador de vínculos.