Кабінет

Статті й порівняння

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 сам ніколи не блокує, а в плагіні блокування за замовчуванням вимкнене.

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