Фільтрація за user agent: що таке UA і чому його замало для захисту від ботів

Фільтрація за user agent — найстаріший спосіб відсікти ботів: сервер читає рядок, яким браузер себе представляє, і вирішує за ним. Розбираємо, що в цьому рядку є, де йому можна вірити і чому одного UA для захисту рекламного трафіку не вистачає.

Боти і фрод9 хв читання
Фільтрація за user agent: що таке UA і чому його замало для захисту від ботів
Зміст
  1. Що таке user agent і що в ньому написано
  2. Як влаштована фільтрація за user agent
  3. User agent бота: хто називає себе чесно
  4. Підміна user agent: чому фільтр лише за UA слабкий
  5. Де фільтрація за user agent усе ж корисна
  6. Поєднання з іншими ознаками: UA як один голос із багатьох
  7. Як це влаштовано в ArtisanClo
  8. Типові помилки під час фільтрації за user agent
  9. Підсумок

User agent (UA) — це рядок, яким браузер чи будь-яка інша програма представляється серверу в заголовку кожного запиту: назва й версія браузера, рушій, операційна система, іноді модель пристрою. Фільтрація за user agent означає, що сервер читає цей рядок і за ним вирішує, кого пускати, кому показати іншу сторінку, а кого відсікти як бота.

Метод простий і дешевий, тому він досі трапляється в самописних скриптах і плагінах «антибот». Але рядок пише сам клієнт, і підробити його простіше, ніж будь-яку іншу ознаку візиту. Нижче — що саме лежить в UA, де цьому рядку можна довіряти, де не можна і як використовувати його в парі з іншими сигналами.

Що таке user agent і що в ньому написано

Типовий рядок мобільного Chrome на Android має такий вигляд:

Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Mobile Safari/537.36

Читати його простіше частинами:

Фрагмент Що означає
Mozilla/5.0 Історичний префікс сумісності, є майже в усіх браузерах і нічого не каже
(Linux; Android 10; K) Платформа й ОС; модель пристрою в сучасних браузерах часто замінено заглушкою
AppleWebKit/537.36 (KHTML, like Gecko) Рушій відмальовування та ще одна данина сумісності
Chrome/130.0.0.0 Браузер і мажорна версія; молодші цифри давно обнуляються
Mobile Safari/537.36 Ознака мобільної верстки

З цього рядка сервер зазвичай видобуває чотири речі: тип пристрою (смартфон, планшет, комп’ютер, телевізор), операційну систему, браузер і ознаку того, що перед ним зовсім не браузер, а програма чи робот.

Зверніть увагу: унікальної інформації в рядку майже немає. Мільйони телефонів надсилають однаковий UA — саме тому браузери його й «заморозили», щоб за ним було важче відстежувати людей.

Client Hints: куди переїжджають подробиці

Браузери на рушії Chromium поступово скорочують класичний рядок, а подробиці віддають через Client Hints — набір заголовків Sec-CH-UA, Sec-CH-UA-Mobile, Sec-CH-UA-Platform та інших. Частина з них приходить із кожним запитом, частина — лише якщо сервер явно попросив. Для фільтрації це корисно у два способи: підказки важче правдоподібно вигадати з нуля, і їх можна звірити з основним рядком. Браузер, який в UA називає себе Chrome на Windows, а в підказках повідомляє іншу платформу, поводиться дивно.

Є й обмеження: Safari та Firefox підтримують підказки інакше або не підтримують зовсім, тому відсутність Client Hints сама собою ні про що не свідчить.

Як влаштована фільтрація за user agent

У найпростішому вигляді це список підрядків: якщо в UA є одне із заборонених слів, відвідувач іде на заглушку. Трохи складніше — парсер, що розкладає рядок на браузер, ОС і пристрій, і правила поверх результату: «пускати лише смартфони», «не пускати Smart TV», «тільки Android».

Тут важливо розрізняти два різні завдання:

  1. Таргетинг — відбір цільової аудиторії: чи потрібен цьому оферу десктоп, чи підходить iOS. Рядок UA тут працює нормально, бо звичайні люди його не підробляють, а помилка коштує недорого.
  2. Захист від ботів — відсів автоматизації. Тут UA як самостійна ознака майже марний: той, хто пише бота, насамперед підставляє рядок справжнього браузера.

Докладніше про фільтри аудиторії за пристроєм, ОС і браузером — у статті про фільтр за гео і пристроєм. Далі йтиметься про друге завдання.

User agent бота: хто називає себе чесно

Частина автоматичного трафіку справді представляється як є. Це два різні класи.

Грубі скрипти й утиліти. Бібліотеки для HTTP-запитів, консольні завантажувачі, парсери за замовчуванням надсилають власний UA — з назвою бібліотеки й версією — або не надсилають його зовсім. Порожній рядок UA чи ім’я бібліотеки замість браузера — надійна ознака: жива людина з реклами так не приходить. Такі візити відсікають одразу й майже без ризику.

Пошукові краулери та «чемні» роботи. Пошуковики, сервіси прев’ю посилань, моніторинги доступності зазвичай чесно вказують своє ім’я та посилання на опис. Для звичайного сайту це корисні гості, і їх не блокують. Але й тут є застереження: рядок відомого пошукового робота часто копіюють парсери, щоб їх пускали туди, куди пускають пошуковик. Тому самі пошукові системи радять перевіряти робота не за UA, а зворотним DNS-запитом до IP-адреси: справжній краулер приходить із мережі своєї компанії.

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

Підміна user agent: чому фільтр лише за UA слабкий

Будь-яка програма, яка хоч трохи маскується, надсилає рядок свіжого Chrome чи Safari. Це робиться одним рядком коду, а в браузері — перемикачем в інструментах розробника. Далі виникають три проблеми.

Підробку не видно з самого рядка. Коректний UA справжнього браузера і такий самий UA в запиті скрипта збігаються байт у байт. Перевірити рядок сам на себе неможливо — тільки звірити з іншими ознаками.

Списки застарівають. Чорний список підрядків потребує постійного оновлення: з’являються нові інструменти, старі змінюють імена, а живі браузери змінюють формат рядка. Список, який не оновлювали пів року, ловить переважно те, що й так давно не приходить.

Хибні спрацювання на живих. Вбудовані браузери застосунків, WebView, старі телефони, корпоративні збірки браузерів надсилають незвичні рядки. Правило «підозріле все, що не схоже на стандартний Chrome» ріже якраз мобільний трафік із соцмереж — той, за який ви платите. Про особливості вбудованих браузерів докладно написано в матеріалі про in-app трафік і фрод.

Порада. Якщо правило за UA спрацьовує на помітній частині платного трафіку, найімовірніше, воно ріже живих людей, а не ботів. Боти, заради яких варто будувати захист, приходять з ідеальним рядком.

Де фільтрація за user agent усе ж корисна

Попри все сказане, UA — нормальна й потрібна ознака, якщо знати її місце.

  • Відсів грубої автоматизації. Порожній UA, ім’я бібліотеки, консольної утиліти чи фреймворку для парсингу — це одразу «ні». Дешевий шар, що знімає навантаження з решти перевірок.
  • Визначення типу пристрою для таргетингу й маршрутизації. Смартфон чи комп’ютер, Android чи iOS — для розподілу трафіку між оферами рядка UA зазвичай достатньо.
  • Розпізнавання вбудованих браузерів. З UA видно, що візит прийшов із браузера всередині застосунку. Це важливо не для блокування, а навпаки — щоб не карати такий візит за ознаки, які у WebView бувають хибними.
  • Звіряння з іншими ознаками. UA каже «iPhone», а екран, набір шрифтів і поведінка скрипта — ні. Сама розбіжність і є сигналом.
  • Аналітика. Зрізи за браузером і ОС у звітах показують, де конверсія просідає і звідки йде підозрілий сплеск.

Поєднання з іншими ознаками: UA як один голос із багатьох

Добрий захист не питає «який у візиту UA», він питає «чи збігається UA з усім іншим». Ось ознаки, з якими його зазвичай звіряють:

Ознака З чим звіряють UA
IP-адреса й мережа Мобільний браузер із мережі хостингу — привід придивитися; про це докладніше в статті про VPN, проксі та IP дата-центрів
Заголовки запиту Набір і порядок заголовків справжнього браузера відрізняються від набору бібліотеки, навіть якщо рядок UA однаковий
Client Hints Платформа й бренд браузера в підказках мають збігатися з рядком
Виконання JavaScript Браузер, що назвався сучасним Chrome, але не виконав скрипт, поводиться не як браузер
Властивості браузера в скрипті Платформа, екран, ознаки автоматизації; докладно — у матеріалі про headless-браузери та відбиток браузера
Поведінка Час на сторінці, рухи миші й дотики

Кожна ознака окремо помиляється. Разом вони дають оцінку, яка помиляється значно рідше. Так влаштований будь-який сучасний розумний фільтр трафіку: поодинока ознака додає трохи підозри, а впевнений висновок виходить зі збігу кількох. Загальну схему шарів захисту ми розбирали в статті про те, як відфільтрувати ботів.

Як це влаштовано в ArtisanClo

В ArtisanClo рядок user agent — один із сигналів, а не окреме правило «за списком». Рішення щодо візиту складається з кількох кроків, і UA бере участь у кожному по-своєму.

Мережа й запит. Перший крок дивиться на адресу, мережу, провайдера, заголовки, мітку кліку й правила потоку — ще до перевірки браузера. Тут відсікаються програми замість браузера та роботи майданчиків для прев’ю посилань: такі візити отримують White Page завжди, за будь-яких налаштувань, а в журналі видно причину «Програма, а не браузер» або «Бот прев’ю / краулер». Живих людей цей крок зачіпає найменше.

Аудиторії. У налаштуваннях фільтрації потоку є списки «Пристрої», «Операційні системи» і «Браузери» з кнопками «Дозволити» та «Заблокувати». Серед пристроїв окремо виділено «Бот / краулер» і «Не визначено». Це таргетинг: відвідувач, що не пройшов список, бачить White Page зі зрозумілою причиною.

Перевірка браузера. Той, хто надіслав рядок справжнього браузера, проходить перевірку скриптом, і вже її відповідь показує, чи схожий візит на автоматизацію. Блокування headless-браузерів за явних слідів автоматизації відсікає одразу, менш явні ознаки йдуть в оцінку довіри разом із мережею, VPN, наявністю провайдера й сайту-джерела.

Вбудовані браузери. Вбудовані браузери Facebook, Instagram, TikTok і WebView у застосунках розпізнаються окремо. Ознака автоматизації в них не відсікає візит одразу, а враховується в оцінці довіри разом із мережею, часом і реферером, бо в таких браузерах вона часто хибна.

Прозорість. Кожен клік у журналі має причину рішення з десятків можливих, а посилання «Розбір візиту» показує всі сигнали й висновки щодо одного візиту. Якщо підозрюєте, що фільтр помилився, почніть зі статті чому клік пішов на White Page. Усі можливості фільтрації зібрано на сторінці можливостей.

Типові помилки під час фільтрації за user agent

  1. Будувати захист на чорному списку підрядків. Він ловить лише тих, хто не ховається, і потребує нескінченного оновлення.
  2. Блокувати все «нестандартне». Під удар потрапляють вбудовані браузери соцмереж і старі пристрої — живий платний трафік.
  3. Вірити рядку, який виглядає правильно. Ідеальний UA сучасного браузера — це якраз те, що надсилає добре зроблений бот.
  4. Плутати таргетинг із захистом. Відбір «тільки Android» — це рішення про аудиторію офера, а не спосіб позбутися ботів.
  5. Не дивитися на причини відсіву. Якщо не видно, яке правило спрацювало, не зрозуміти, чи ріже фільтр ботів, чи людей. Ознаки, за якими бот-трафік видно у звітах, зібрано в статті про ознаки бот-трафіку.

Підсумок

Рядок user agent — це те, що клієнт каже про себе сам. Йому можна вірити, коли ставки низькі: для визначення пристрою, розподілу трафіку, аналітики. Йому не можна вірити як доказу, що перед вами людина. Фільтрація за user agent добре знімає грубі скрипти й порожні запити, але справжній захист починається там, де UA звіряють із мережею, заголовками, Client Hints, виконанням скрипта й поведінкою. Тоді підроблений рядок не допомагає боту, а незвичний рядок не шкодить живому відвідувачу.

Часті запитання

01

Що таке user agent простими словами?

Це коротка текстова візитівка, яку браузер або програма надсилає серверу з кожним запитом. У ній зазначено, що це за програма, якої версії і на якій системі працює. Сервер за нею підбирає верстку, рахує статистику й іноді вирішує, чи пускати відвідувача.

02

Чи можна підробити user agent?

Так, і дуже легко. У будь-якій бібліотеці для HTTP-запитів це один рядок налаштувань, у браузері — пункт інструментів розробника або розширення. Тому збіг UA зі звичайним Chrome нічого не доводить, а от явна невідповідність UA та інших ознак візиту — уже вагомий сигнал.

03

Як дізнатися свій user agent?

Найпростіше відкрити консоль розробника в браузері й виконати navigator.userAgent — рядок виведеться повністю. Ще його видно на вкладці мережі в заголовках будь-якого запиту. Багато сайтів-перевірок теж його показують, але для роботи вистачає вбудованих засобів браузера.

04

Чому пошукових роботів не блокують за user agent?

Для звичайного сайту пошукові роботи корисні: без них сторінка не потрапить у видачу. До того ж їхній UA часто підробляють, тому самі пошуковики радять перевіряти робота не за рядком, а зворотним DNS-запитом до його IP-адреси. Блокувати їх чи пускати — рішення власника сайту, а не завдання рекламного фільтра.

05

Чи замінять Client Hints рядок user agent?

Частково. Браузери на рушії Chromium уже скорочують класичний рядок і переносять подробиці в заголовки Sec-CH-UA, причому частину з них сервер отримує лише на запит. Інші браузери підтримують їх не повністю, тож на практиці сайти читають обидва джерела й звіряють їх між собою.

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

8 хв читання

Фільтрація за гео, мовою, пристроєм і розкладом: точний таргетинг на своєму боці

Фільтр за гео, пристроєм і розкладом — найзрозуміліші правила відбору трафіку. Вони відсікають нецільові візити, які рекламний майданчик однаково пропустить, і майже не зачіпають живих покупців.

9 хв читання

Як відфільтрувати ботів у рекламному трафіку й не втратити живих людей

Фільтрація ботів — це не одна галочка «антибот», а ланцюжок перевірок від IP-адреси до поведінки в браузері. Розбираємо, як його вибудувати, щоб бюджет ішов на людей.

9 хв читання

Розумний фільтр трафіку: як влаштована система виявлення ботів

Розумний фільтр трафіку не просто звіряє візит зі списком правил, а зважує десятки ознак, навчається на історії й підлаштовується під ваш трафік. Розбираємо, що за цим стоїть, де він помиляється і як контролювати його рішення.

Перевірте свій трафік на ділі

Підключіть ArtisanClo до свого сайту — і побачите, хто насправді приходить із реклами та чому кожен клік отримав саме таке рішення.