Кабинет

Статьи и сравнения

Headless-браузеры: что это такое и как сайты их распознают

Headless-браузером называют обычный браузерный движок, который работает без окна. Скрипт говорит ему, какие страницы открыть, что ввести и куда нажать. Им каждый день пользуются тестировщики, сервисы мониторинга и парсеры, а также боты, которые регистрируют фейковые аккаунты или перебирают украденные пароли. Сайт не может спросить посетителя, кто он, поэтому смотрит, что сообщает браузер и как ведет себя соединение.

Проверьте свой браузер прямо сейчас

Проверяю браузер…

Запустить тест: Проверка на бота →

Кто запускает headless-браузеры

Без окна умеют работать Chrome, Firefox и WebKit. Чаще всего ими управляют Puppeteer, Playwright и Selenium.

Большая часть такого трафика безвредна: тесты сайта перед релизом, мониторы доступности и скорости, сервисы, которые делают из страниц скриншоты или PDF. Те же инструменты используют для подбора паролей из украденных баз, массовых регистраций, злоупотребления промокодами и агрессивного сбора цен. Если блокировать каждый headless-браузер, под блокировку попадут и ваши собственные тесты и мониторинг.

Признаки в самом браузере

Браузер под автоматизацией должен об этом сообщать. Стандарт WebDriver требует, чтобы navigator.webdriver был равен true, и Puppeteer, Playwright и Selenium по умолчанию его не выключают. Headless Chrome еще и пишет «HeadlessChrome» в свой User-Agent, если скрипт это не изменил. Эти два признака ловят честные инструменты и небрежных ботов. Бот, сделанный для злоупотреблений, убирает оба.

Другие следы оставляет среда, в которой работает браузер:

У каждого из этих признаков есть невинное объяснение на некоторых настоящих компьютерах, поэтому один след должен снижать оценку, а для блокировки нужно больше.

Признаки скрытого headless-браузера

Когда бот прячет очевидные признаки, ему приходится менять значения в нескольких местах сразу, и какие-то места он пропускает. Web Worker или iframe могут по-прежнему показывать настоящую платформу или язык. User-Agent в JavaScript может отличаться от того, что в HTTP-заголовке или в Client Hints. Функции браузера, подмененные скриптом, могут выглядеть иначе, чем встроенные. Такие разрывы находят проверки, которые читают один и тот же факт из двух источников.

Признаки в сети

Сервер видит то, что скрипт страницы изменить не может. Боты в основном работают в дата-центрах, так что их IP-адрес часто принадлежит хостингу или VPN. TLS-рукопожатие показывает, какая программа открыла соединение: скрипт, который шлет запросы через HTTP-библиотеку, имеет другой TLS-отпечаток (JA3, JA4), чем Chrome, которым он называется. Остальное добавляет поведение: страницы открываются быстрее, чем человек успевает читать, формы заполняются за долю секунды, с одного устройства регистрируется много аккаунтов.

Что проверяет SpoofLens

Проверка на этой странице ищет navigator.webdriver, HeadlessChrome в User-Agent (в JavaScript и в HTTP-заголовке), окно нулевого размера, отсутствующий window.chrome в десктопном Chrome, программный рендеринг, подмененные функции браузера, Web Worker или iframe, которые не совпадают со страницей, TLS-рукопожатие не от браузера, IP дата-центра, а на Android еще и отсутствующие датчики движения. Если найден navigator.webdriver или HeadlessChrome, вердикт будет «автоматизация». У каждой находки есть объяснение, и она снижает индекс правдивости на свой вес.

Для владельцев сайтов

Определите, какие действия нужно защищать: регистрацию, вход, оформление заказа, промокоды, формы обратной связи. Разрешите headless-трафику читать публичные страницы, а перед этими действиями при низкой оценке добавляйте препятствие: подтверждение почты, капчу или ручную проверку. Внесите собственные мониторы и тесты в список разрешенных по IP-адресу или по секретному заголовку, чтобы их никогда не блокировало.

API SpoofLens возвращает оценку, вердикт и причины для каждой регистрации или заказа. Плагин для WordPress / WooCommerce показывает их рядом с пользователями и заказами и блокирует автоматизированные браузеры, только если вы это включите.

Частые вопросы

Каждый ли headless-браузер является ботом?
Нет. Сервисы мониторинга, тестирования, скриншотов и PDF постоянно пользуются headless-браузерами. Считайте «headless» одним сигналом и смотрите, что посетитель пытается сделать.
Может ли headless-браузер пройти проверку?
Тщательно настроенный проходит часть проверок. Каждое измененное значение должно сходиться со всеми остальными, поэтому противоречия остаются самым надежным признаком. Серверные сигналы, например TLS-рукопожатие и сеть IP, трудно подделать изнутри браузера.
Заблокирует ли это мой монитор доступности?
Только если вы включите блокировку автоматизированных браузеров и не внесете монитор в список разрешенных. API сам никогда не блокирует, а в плагине блокировка по умолчанию выключена.

Читайте также