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