Существуют разные способы реализации фильтрации контента и сети в расширениях Chrome. В этом руководстве представлен обзор возможностей фильтрации контента, доступных расширениям, а также различных подходов, методов и API фильтрации, которые могут использоваться расширениями Chrome.
Фильтровать сетевые запросы
Основной способ фильтрации сетевых запросов в расширениях Chrome — использование API chrome.declarativeNetRequest
. С помощью Declarative Net Request разработчики могут блокировать или изменять сетевые запросы, определяя декларативные правила. Формат правила декларативного сетевого запроса основан на возможностях синтаксиса списка фильтров, используемого большинством блокировщиков рекламы.
Эти правила способны:
- Заблокируйте сетевой запрос.
- Обновите схему URL-адресов до безопасной схемы (с http на https или с ws на wss).
- Перенаправить сетевой запрос.
- Измените заголовки запроса или ответа.
Chrome поддерживает правила, связанные с расширением, а также правила, обновляемые динамически (например, в ответ на удаленную настройку или ввод пользователя).
Объедините правила фильтрации с вашим расширением
Правила, включенные в пакет расширения, называются «статическими правилами». Эти правила устанавливаются и обновляются при установке или обновлении расширения. Chrome ограничивает количество статических правил, которые может объявить расширение.
Для статических правил декларативного сетевого запроса в Chrome имеется глобальный общий пул из 300 000 правил, которые могут использоваться совместно набором установленных расширений. Кроме того, каждому расширению гарантировано наличие 30 000 статических правил. Например, если у пользователя установлено только одно расширение фильтрации контента, это расширение может использовать до 330 000 статических правил декларативного сетевого запроса. Чтобы получить представление о том, сколько это правил, популярный список фильтров EasyList , используемый большинством блокировщиков рекламы, состоит примерно из 35 000 сетевых правил.
Статические декларативные правила сетевых запросов могут быть организованы в различные наборы правил. Расширение может указать до 100 статических наборов правил, и одновременно можно включить 50 из этих наборов правил.
Динамическое добавление правил фильтрации во время выполнения
Некоторые правила невозможно объединить с расширением. Вместо этого расширения должны добавлять их во время выполнения. Эти правила называются «динамическими правилами».
Для динамических правил декларативного сетевого запроса Chrome допускает максимум 30 000 безопасных динамических правил на одно расширение. Большинство правил считаются безопасными: block
, allow
, allowAllRequests
upgradeScheme
. Даже если правило не считается безопасным (например, redirect
), его все равно можно добавлять динамически, но с более низким максимальным пределом в 5000, который также учитывается при расчете лимита в 30 000 динамических правил. Для сравнения: 98–99% правил в списке фильтров easylist являются безопасными правилами .
Расширения фильтрации контента могут использовать статические и динамические правила соответственно для объединения известных правил фильтрации со своими расширениями и обновления своих расширений новыми правилами фильтрации контента со своих серверов, когда это необходимо.
Адаптируйте правила на основе наблюдаемых запросов
Рекламная экосистема постоянно развивается, и фильтры контента необходимо соответствующим образом обновлять. Объединив chrome.webRequest
и динамические правила декларативного сетевого запроса, можно анализировать сетевые запросы на предмет потенциальных нарушений конфиденциальности и блокировать их в будущем.
Основной подход:
- Анализируйте веб-запросы с помощью API
chrome.webRequest
и пытайтесь автоматически определять запросы, не соответствующие вашим требованиям конфиденциальности, например, с помощью машинного обучения. - Создайте динамическое правило декларативного сетевого запроса для каждого запроса, определенного на втором этапе, чтобы аналогичные запросы блокировались в будущем.
- (Необязательно) Отправьте определенное правило декларативного сетевого запроса обратно на свой сервер, чтобы его можно было добавить в качестве статического правила декларативного сетевого запроса при следующем обновлении расширения.
Преимущество этого подхода в том, что анализ происходит асинхронно и не оказывает негативного влияния на производительность веб-сайта.
Разрешить пользователям определять свои собственные правила фильтрации
Вы можете позволить своим пользователям определять свои собственные правила фильтрации контента, предоставив пользовательский интерфейс настройки фильтра в вашем расширении. Преобразуйте эти определяемые пользователем правила в правила декларативного сетевого запроса и добавьте их как динамические правила . Эти правила будут по-прежнему доступны для пользователей, поскольку они сохраняются во всех сеансах браузера и обновлениях расширений. Используя этот подход, пользователи могут добавлять до 30 000 пользовательских правил.
Элементы фильтра на веб-страницах
Фильтрация сетевых запросов — это лишь одна важная часть фильтрации контента. Еще одна важная часть — удаление нежелательного контента непосредственно с веб-страниц. Например, более 40% правил списков фильтров easylist определяют, как клиенты должны скрывать элементы страницы.
Этого можно добиться с помощью сценариев контента . Скрипты контента выполняются в контексте веб-страниц и могут вносить в них изменения с помощью DOM.
Расширениям Chrome не разрешено выполнять удаленно размещенный код . Однако данные с сервера о том, какие элементы скрывать, не затрагиваются, поскольку они считаются данными конфигурации. Следовательно, правила элементов могут обновляться во время выполнения, когда это необходимо.
Фильтрация сетевых запросов в расширениях, установленных политикой
Варианты использования на предприятиях и в сфере образования часто предъявляют чрезвычайно строгие требования к фильтрации контента и сети, например к фильтрации запросов на основе их содержимого. Чтобы реализовать эти варианты использования, расширения, установленные политикой, имеют дополнительный способ фильтрации и блокировки сетевых запросов. Используя опцию «блокировки» с событиями в API webRequest
, можно реализовать программный фильтр содержимого, который выполняет пользовательскую логику при каждом запросе, чтобы решить, следует ли блокировать запрос или нет. Это ограничено расширениями, установленными на основе политики, поскольку они имеют более высокий уровень доверия.
Перехват навигационных запросов
Запросы навигации можно фильтровать с помощью правил декларативного сетевого запроса. Например, вы можете обойти URL-адреса отслеживания, которые перенаправляют пользователя в пункт назначения. Одним из способов решения этой проблемы является перенаправление запроса навигации https://tracker.com?redirect=https%3A%2F%2Fexample.com
на страницу расширения (которую необходимо настроить как доступный через Интернет ресурс ), которая затем будет запустите сценарий для извлечения цели перенаправления и перенаправления к месту назначения с помощью window.location.replace("https://example.com")
в обход средства отслеживания ссылок.