Client Hints проти User-Agent: Налаштування полів Sec-CH-UA для проходження фільтрів Google

· 11 хв читання
client hints user-agent Sec-CH-UA Google фінгерпринтинг антидетект
Client Hints проти User-Agent: Налаштування полів Sec-CH-UA для проходження фільтрів Google

Готові захистити свою цифрову особистість?

Оберіть тариф і запускайте непомітні профілі вже сьогодні.

Почати

Google тихо розгортає нову систему ідентифікації браузерів, яка робить застарілий підхід до User-Agent маніпуляцій вразливим. Client Hints — це не просто заміна User-Agent рядка, це новий рівень перевірок, де невідповідність між десятками HTTP-заголовків миттєво видає автоматизований трафік. Ось що насправді відбувається і як з цим працювати.

Що таке Client Hints і чому це важливо

Client Hints — це набір HTTP-заголовків запиту, запропонований Google як заміна монолітному User-Agent рядку. Ідея проста: замість одного величезного рядка типу Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36..., браузер надсилає структуровані заголовки лише за запитом сервера.

Але для нас важливий інший аспект: Client Hints дозволяють серверу запитувати набагато більше інформації, ніж містить традиційний UA рядок. І ця інформація перехресно верифікується.

Основні заголовки Client Hints:

  • Sec-CH-UA — бренд та major version браузера
  • Sec-CH-UA-Full-Version-List — повні версії всіх брендів
  • Sec-CH-UA-Platform — операційна система
  • Sec-CH-UA-Platform-Version — версія ОС
  • Sec-CH-UA-Mobile — мобільний пристрій чи ні
  • Sec-CH-UA-Arch — архітектура процесора (x86, arm)
  • Sec-CH-UA-Model — модель пристрою (для мобільних)
  • Sec-CH-UA-Bitness — розрядність (32/64 bit)
  • Sec-CH-UA-WoW64 — 32-bit процес на 64-bit Windows

Google надсилає заголовок Accept-CH у відповіді, щоб браузер надав додаткові підказки. Chrome автоматично відповідає на ці запити — і саме тут починаються проблеми для антидетект-браузерів.

Анатомія конфлікту User-Agent vs Client Hints

Традиційний підхід до маніпуляцій з UA: змінити navigator.userAgent у JavaScript та відправити підроблений User-Agent заголовок. Цього більше недостатньо.

Розглянемо типову невідповідність. Антидетект-браузер підміняє UA на:

Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36

Але при цьому Client Hints заголовки можуть показувати:

  • Sec-CH-UA-Platform: "Linux" — бо браузер насправді запущений на Linux
  • Sec-CH-UA-Platform-Version: "6.5" — версія Linux ядра
  • Sec-CH-UA-Arch: "x86" — 32-bit архітектура
  • Sec-CH-UA: може містити внутрішнє ім’я браузера замість “Chrome”

Ця тріада невідповідностей — UA каже Windows, CH каже Linux; UA каже Chrome 120, CH показує інший бренд — є чітким сигналом для детекторів Google.

JavaScript API додає ще один рівень: navigator.userAgentData — об’єкт, що повертає структуровані Client Hints дані. Властивості brands, mobile, platform та метод getHighEntropyValues() повертають ті ж дані, що й HTTP заголовки. Розбіжність між User-Agent заголовком та navigator.userAgentData — негайна детекція.

Структура Sec-CH-UA: що потрібно знати

Sec-CH-UA використовує формат structured field (RFC 8941). Реальний Chrome 120 на Windows відправляє:

Sec-CH-UA: "Not_A Brand";v="8", "Chromium";v="120", "Google Chrome";v="120"

Цей формат не випадковий. “Not_A Brand” — навмисний фіктивний бренд для уникнення парсингу UA за брендом. Порядок записів, лапки, крапки з комою — все це специфікація.

Sec-CH-UA-Full-Version-List містить повні версії:

Sec-CH-UA-Full-Version-List: "Not_A Brand";v="8.0.0.0", "Chromium";v="120.0.6099.109", "Google Chrome";v="120.0.6099.109"

Важливо: мінорна версія має відповідати конкретному Chrome build. Google знає, які мінорні версії існували для Chrome 120 (120.0.6099.71, 120.0.6099.109, 120.0.6099.130 тощо). Видумана версія 120.0.0.0 — миттєва детекція.

Sec-CH-UA-Platform-Version для Windows відправляє версію Windows як рядок "15.0.0" для Windows 11, "10.0.0" для Windows 10. Для macOS — версію macOS. Для Linux — версію ядра. Ця версія має бути реалістичною та узгодженою з іншими заголовками.

Google використовує Client Hints у кількох точках своєї рекламної екосистеми:

Google Ads trafficking: при завантаженні рекламних оголошень Google Ads JavaScript SDK відправляє запит до googleads.g.doubleclick.net з повним набором Client Hints. Невідповідність між декларованою ОС та реальними браузерними параметрами впливає на якісний score трафіку.

reCAPTCHA v3: використовує Client Hints як один із сигналів для оцінки людиноподібності взаємодії. Chrome із правильними Client Hints отримує вищий базовий score.

Google Workspace та OAuth: при автентифікації через Google OAuth, Client Hints перевіряються для оцінки ризику входу. Несподіваний Client Hints профіль — це додатковий фактор для вимоги 2FA.

YouTube та Google Search: системи захисту від ботів на YouTube та пошуку Google використовують Client Hints разом із поведінковими сигналами.

Правильне налаштування Client Hints

Для коректного маскування потрібно синхронізувати кілька рівнів:

Рівень 1: HTTP заголовки. Браузер автоматично відправляє Client Hints заголовки. Антидетект-браузер має перехоплювати ці заголовки та замінювати їх на значення, що відповідають декларованому UA.

Рівень 2: JavaScript API. navigator.userAgentData має повертати дані, узгоджені з HTTP заголовками. navigator.userAgentData.brands — той самий список, що й Sec-CH-UA. navigator.userAgentData.platform — та сама платформа, що й Sec-CH-UA-Platform.

Рівень 3: High Entropy Values. Коли сайт викликає navigator.userAgentData.getHighEntropyValues(['platformVersion', 'architecture', 'bitness']), відповідь має бути узгодженою з усіма іншими значеннями.

Рівень 4: Frozen UA string. Сучасний Chrome заморожує частину UA рядка (замінюючи мінорні версії на 0.0), але userAgentData дає точні значення. Ця асиметрія є навмисною — і антидетект має її відтворювати.

Приклад правильного профілю Chrome 120 на Windows 11

User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36

Sec-CH-UA: "Not_A Brand";v="8", "Chromium";v="120", "Google Chrome";v="120"
Sec-CH-UA-Mobile: ?0
Sec-CH-UA-Platform: "Windows"
Sec-CH-UA-Platform-Version: "15.0.0"
Sec-CH-UA-Arch: "x86"
Sec-CH-UA-Bitness: "64"
Sec-CH-UA-Full-Version-List: "Not_A Brand";v="8.0.0.0", "Chromium";v="120.0.6099.109", "Google Chrome";v="120.0.6099.109"
Sec-CH-UA-WoW64: ?0

Відповідний JavaScript:

navigator.userAgentData.brands // [{"brand":"Not_A Brand","version":"8"}, {"brand":"Chromium","version":"120"}, {"brand":"Google Chrome","version":"120"}]
navigator.userAgentData.mobile // false
navigator.userAgentData.platform // "Windows"
// getHighEntropyValues:
// platformVersion: "15.0.0"
// architecture: "x86"
// bitness: "64"
// fullVersionList: same as Sec-CH-UA-Full-Version-List

Специфіка Firefox та Camoufox

Firefox не реалізує Client Hints API — він не надсилає Sec-CH-UA заголовки та не має navigator.userAgentData. Це важливий момент для антидетект-браузерів на основі Firefox.

Camoufox, на якому базується Santiago, спадкує цю особливість Firefox. Відсутність Client Hints заголовків — це нормальна поведінка для Firefox, не аномалія. Сервери, які перевіряють Sec-CH-UA, отримують відсутній заголовок від Firefox і мають коректно fallback’атись на User-Agent.

Але є нюанс: якщо сайт бачить UA, що заявляє Chrome, але не бачить Sec-CH-UA — це підозріло. Хром ЗАВЖДИ надсилає Sec-CH-UA принаймні з базовим набором. Тому антидетект на Firefox, що підміняє UA на Chrome UA без додавання Client Hints заголовків, створює детекційну аномалію.

Правильна стратегія для Firefox-based антидетект: або використовувати Firefox UA (без Client Hints — нормально), або при підміні на Chrome UA додавати відповідні Client Hints заголовки.

Детекція через getHighEntropyValues

Метод navigator.userAgentData.getHighEntropyValues() повертає Promise — асинхронний. Це означає, що деякі значення доступні тільки після await, і детектори використовують це для перевірки реактивності браузера.

Реальний Chrome повертає high entropy values з мікросекундною затримкою (внутрішній IPC до браузерного процесу). Синхронна відповідь або відповідь з неприродною затримкою — сигнал.

Крім того, getHighEntropyValues() підтримує тільки конкретний набір ключів. Запит невідомого ключа повертає порожнє значення, не помилку. Антидетект має правильно реалізувати цю поведінку.

Практичні рекомендації

Для арбітражу та Google Ads: використовуйте профілі з правильними Client Hints, узгодженими з UA. Невідповідність прямо впливає на якість трафіку та CPM.

Для управління акаунтами Google: створюйте профілі з реалістичними Client Hints для конкретної ОС. Windows 11 профіль — Sec-CH-UA-Platform-Version: "15.0.0". Windows 10 — "10.0.0".

Для соціальних мереж із Google OAuth: правильні Client Hints знижують ризик-score входу та зменшують частоту запитів на підтвердження особи.

Перевірка: використовуйте https://clienthints.glitch.me/ або аналогічні тести для верифікації відображуваних Client Hints перед запуском кампаній.

Ера простої заміни User-Agent рядка закінчилась. Client Hints — це новий стандарт ідентифікації, і правильна робота з ним є ключовою компетенцією для будь-якого серйозного антидетект-рішення.

Готові захистити свою цифрову особистість?

Оберіть тариф і запускайте непомітні профілі вже сьогодні.

Отримуйте 15% довічну комісію з кожного реферала.

Стати партнером →