Headless-браузеры: что это такое и как сайты их распознают
Headless-браузером называют обычный браузерный движок, который работает без окна. Скрипт говорит ему, какие страницы открыть, что ввести и куда нажать. Им каждый день пользуются тестировщики, сервисы мониторинга и парсеры, а также боты, которые регистрируют фейковые аккаунты или перебирают украденные пароли. Сайт не может спросить посетителя, кто он, поэтому смотрит, что сообщает браузер и как ведет себя соединение.
Проверьте свой браузер прямо сейчас
Проверяю браузер…
Кто запускает headless-браузеры
Без окна умеют работать Chrome, Firefox и WebKit. Чаще всего ими управляют Puppeteer, Playwright и Selenium.
Большая часть такого трафика безвредна: тесты сайта перед релизом, мониторы доступности и скорости, сервисы, которые делают из страниц скриншоты или PDF. Те же инструменты используют для подбора паролей из украденных баз, массовых регистраций, злоупотребления промокодами и агрессивного сбора цен. Если блокировать каждый headless-браузер, под блокировку попадут и ваши собственные тесты и мониторинг.
Признаки в самом браузере
Браузер под автоматизацией должен об этом сообщать. Стандарт WebDriver требует, чтобы navigator.webdriver был равен true, и Puppeteer, Playwright и Selenium по умолчанию его не выключают. Headless Chrome еще и пишет «HeadlessChrome» в свой User-Agent, если скрипт это не изменил. Эти два признака ловят честные инструменты и небрежных ботов. Бот, сделанный для злоупотреблений, убирает оба.
Другие следы оставляет среда, в которой работает браузер:
- Программный рендеринг вроде SwiftShader или llvmpipe вместо настоящей видеокарты, типичный для серверов без GPU.
- Видимая страница, у которой внешний размер окна браузера нулевой.
- Отсутствующий объект window.chrome в десктопном Chrome.
- User-Agent Android без единого показания датчиков движения: так выглядит мобильная эмуляция на компьютере.
У каждого из этих признаков есть невинное объяснение на некоторых настоящих компьютерах, поэтому один след должен снижать оценку, а для блокировки нужно больше.
Признаки скрытого 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 сам никогда не блокирует, а в плагине блокировка по умолчанию выключена.
Читайте также
- Отпечаток браузера: что это такое и как он работает
- Как сайты обнаруживают ботов и автоматизированные браузеры
- Отпечатки canvas, WebGL и аудио: как они работают
- Утечка WebRTC: что это такое и как проверить свой браузер
- Часовой пояс против IP: почему сайты замечают ваш VPN
- Как сайты распознают антидетект-браузеры