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.
Filtra solicitudes de red
La forma principal de filtrar solicitudes de red en las extensiones de Chrome es usar la chrome.declarativeNetRequest API. 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 usan la mayoría de los bloqueadores de anuncios.
Estas reglas pueden hacer lo siguiente:
- Bloquear una solicitud de red
- Actualizar el esquema de URL a un esquema seguro (http a https o ws a wss)
- Redireccionar una solicitud de red
- Modificar encabezados de solicitud o respuesta
Chrome admite reglas incluidas con una extensión y las que se actualizan de forma dinámica (por ejemplo, en respuesta a una configuración remota o a la entrada del usuario).
Incluye 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.
Para 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, la extensión puede usar hasta 330,000 reglas estáticas de Declarative Net Request. Para que te hagas una idea de cuántas reglas son, 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 estáticas de Declarative Net Request se pueden organizar en diferentes conjuntos de reglas. Una extensión puede especificar hasta 100 conjuntos de reglas estáticas, y 50 de estos conjuntos de reglas se pueden habilitar a la vez.
Agrega reglas de filtro de forma dinámica en el tiempo de ejecución
Algunas reglas no se pueden incluir con la extensión. En cambio, las extensiones deben agregarlas en el tiempo de ejecución. Estas reglas se denominan "reglas dinámicas".
Para 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 reglas 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 cuenta para el límite de 30,000 reglas dinámicas. Para poner esto en perspectiva, el 98% al 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 con su extensión y para actualizar sus extensiones con nuevas reglas de filtrado de contenido de sus servidores cuando sea necesario.
Adapta las reglas en función de las solicitudes observadas
El ecosistema de anuncios evoluciona constantemente, y los filtros de contenido deben actualizarse en consecuencia. Si combinas chrome.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 bloquearlas en el futuro.
El enfoque básico es el siguiente:
- Analiza las solicitudes web con la API de
chrome.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 dinámica de Declarative Net Request para cada solicitud que se haya identificado en el segundo paso, de modo que se bloqueen 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.
Permite 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 estando disponibles para los usuarios, ya que persisten en las sesiones del navegador y las actualizaciones de extensiones. Con este enfoque, los usuarios pueden agregar hasta 30,000 reglas personalizadas.
Filtra elementos en páginas web
Filtrar 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.
Filtra 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 filtrar solicitudes en función de 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 "blocking" con 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 limita a las extensiones instaladas por políticas, ya que tienen un nivel de confianza más alto.
Intercepta solicitudes de navegación
Las solicitudes de navegación se pueden filtrar con reglas de Declarative Net Request. Por ejemplo, es posible que quieras omitir las URLs de seguimiento que redireccionan al usuario a su destino deseado. Una forma de 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 a la Web), que luego ejecutará una secuencia de comandos para extraer el destino de redireccionamiento y redireccionar al destino con window.location.replace("https://example.com") eludiendo el rastreador de vínculos.