Виявлення ботів у TRACIO ідентифікує автоматизовані браузери, headless-інструменти та скриптові атаки за допомогою дворівневої архітектури: клієнтський збір у браузерному агенті та серверний аналіз. Воно охоплює поширені фреймворки автоматизації, headless-браузери, AI-агентів для вебсерфінгу та антидетект-браузери з майже нульовою кількістю хибних спрацювань, автоматично додаючи легітимні пошукові кроулери до allowlist.
Браузерний агент виконує широкий набір перевірок і повідомляє їхні результати. На
сервері результати зважуються в оцінку бота, а оцінка зіставляється з вердиктом.
Невелика кількість однозначних індикаторів є вирішальними самі собою й форсують
вердикт bot незалежно від решти.
Які перевірки виконуються, як вони зважуються і де проходять пороги — не публікується на жодному тарифі. Описавши це, ми б прямо повідомили операторам ботів, що саме змінити, щоб пройти захист. Натомість ви отримуєте вердикт, мітку типу бота і — на Business та вище — коди причин, які називають клас спостереження, що стоїть за рішенням.
Кожна ідентифікація несе вердикт щодо бота. До вас він доходить як bot.result у
payload вебхука і як result.bot у клієнтському SDK.
| Результат | Опис |
|---|---|
human | Індикаторів автоматизації не знайдено. Верифіковані пошукові кроулери також розв’язуються в human. |
bot | Виявлено автоматизований або скриптовий доступ. Супроводжується міткою bot.type. |
uncertain | Змішані або слабкі сигнали — ані явно людина, ані явно автоматизація. |
Це зіставляється з бізнес-полем decision.action (real, fake або suspicious),
яке використовується в усьому дашборді та в payload вебхука.
Вердикт супроводжується полем bot.score. У версії 2 payload вебхука це десяткове
число у шкалі 0..100 — те саме, що дашборд показує для цього візиту. (У замороженій
схемі версії 1 це частка у шкалі 0..1; див. Вебхуки.)
bot.type присутній, коли результат — bot. Це або ім’я розпізнаного бота чи
середовища виконання, або родина, коли називання конкретної перевірки розкрило
б внутрішній устрій детектора:
bot.type | Значення |
|---|---|
playwright, jsdom, electron | Розпізнано назване середовище виконання автоматизації |
browser_use, claude_computer_use, skyvern, genspark, fellou | Розпізнано названого AI-агента для вебсерфінгу |
automation | Інструменти автоматизації — без називання конкретної перевірки |
headless | Браузер, що працює без користувацького інтерфейсу |
antidetect | Антидетект-збірка, що підробляє відбиток |
extension | Розширення браузера, яке веде автоматизацію, проксіювання або VPN |
privacy_browser | Збірка браузера з посиленою приватністю (наприклад, Mullvad Browser) |
other | Виявлено, але поза опублікованим словником |
Список закритий навмисно: перевірка, додана до детектора завтра, проявиться як
other, а не витече своїм внутрішнім іменем. Ставтеся до bot.type як до мітки, за
якою ви розгалужуєтеся, а не як до вичерпного enum для валідації — нові іменовані
середовища виконання додаються з часом.
На тарифах Business та Enterprise payload вебхука несе масив reasons — щонайбільше
вісім записів, відсортованих за важливістю. Код називає клас спостереження, але
ніколи — перевірку, що стоїть за ним:
| Код | Що означає |
|---|---|
automation_signature | Сліди інструментів автоматизації |
headless_browser | Браузер без користувацького інтерфейсу |
anonymous_browser | Збірка з посиленою приватністю або антидетект, що вдає звичайну |
privacy_hardening | Агресивні налаштування приватності |
behavior_anomaly | Нелюдські патерни взаємодії |
fingerprint_tampering | Значення, які мають узгоджуватися між собою, не узгоджуються |
environment_anomaly | Середовище виконання внутрішньо суперечливе |
identity_mismatch | Заявлена ідентичність розходиться зі спостережуваною |
virtual_environment | Емулятор замість фізичного заліза |
strong_automation_evidence | Однозначні індикатори бота — вирішальні самі собою |
detection_signal | Інші перевірки, що спрацювали |
severity набуває значень high, medium або low й означає частку вердикту,
що припадає на цей клас у цьому візиті, а не фіксовану властивість коду. Той самий
код може прийти як high в одному візиті й як low в іншому — не кешуйте його як
константу.
privacy_hardening потребує особливої обережності: він спрацьовує і на звичайних
відвідувачах, які дбають про приватність, не лише на спробах ухилення. Зважуйте його
разом з рештою, а не дійте за ним самим.
virtual_environment походить із виявлення емуляторів. Окремого вердикту «працює під
гіпервізором» у вебі немає: підказки, які бачить браузер, — універсальний програмний
рендерер, незвично мала кількість ядер — так само часто трапляються на звичайних
машинах без драйвера GPU і всередині сесій віддаленого робочого стола, тож ми не
перетворюємо їх на вердикт, у якому вам довелося б сумніватися.
| Можливість | Доступність |
|---|---|
| Виявлення автоматизації, headless та AI-агентів | Усі тарифи |
| Allowlist верифікованих кроулерів | Усі тарифи |
| Виявлення емуляторів | Усі тарифи |
Індикатори антидетекту (bot.antidetectScore, 0..100) | Pro і вище |
| Коди причин, поведінковий блок | Business і вище |
| Виявлення DevTools | Business і вище |
Оцінка антидетекту ще калібрується.
bot.antidetectScoreповідомляється, щоб ви могли спостерігати за ним і налаштовувати власну політику — сприймайте його як вхід до вашого рішення про ризик, а не як самостійну підставу для блокування.
Перевірки лише для мобільних не працюють у вебі. Виявлення root, jailbreak, клонованих/здвоєних застосунків і Frida спирається на нативні мобільні сигнали, які браузер зібрати не може. TRACIO постачає лише браузерні SDK, тож покладайтеся на вердикти щодо автоматизації, headless, AI-агентів, антидетекту, емуляторів і поведінки — вони повністю активні у вебі.
Відомі «хороші» боти розпізнаються за їхнім user-agent, а потім верифікуються за IP-адресою підключення: зворотний DNS-запит за IP, перевірка, що отримане ім’я хоста належить домену оператора, і прямий запит, який підтверджує, що воно розв’язується назад у той самий IP. Це та сама процедура верифікації, яку публікують самі оператори кроулерів.
| Кроулер | Верифіковані домени |
|---|---|
.googlebot.com, .google.com | |
| Bing | .search.msn.com |
| Apple | .applebot.apple.com |
| Yahoo | .crawl.yahoo.net |
| Yandex | .yandex.com, .yandex.net, .yandex.ru |
| DuckDuckGo | .duckduckgo.com |
Верифікований кроулер розв’язується в human. Запит, який заявляє, що він Googlebot,
тоді як його IP доказово належить комусь іншому, класифікується як бот — а просто
відсутній або перерваний за таймаутом запит доказом підробки не вважається.
Динаміка взаємодії — рух вказівника, ритм клавіатури, прокручування — живить вердикт
як свідчення того, чи присутня людина, а не того, яка саме це людина. На
Business і вище агрегат доставляється у блоці behavior вебхука:
{ "behavior": { "score": 87, "verdict": "human", "confidence": 0.92 }}score іде у шкалі 0..100 (вище — «людяніше»), verdict набуває значень human,
uncertain або bot, а confidence (0..1) каже, на якому обсязі свідчень
тримається вердикт: короткий візит із двома рухами вказівника отримує тут низьке
значення, навіть якщо сам вердикт виглядає рішучим.
Блок присутній лише тоді, коли поведінкова оцінка справді виконувалася для цього візиту. Відсутність блоку означає «немає даних», але ніколи — «нічого підозрілого»; не читайте його відсутність як чистий сигнал.
Клієнтський SDK надає зручний булевий прапорець result.bot.detected і поле
confidence у шкалі 0..100:
const result = await tracio.getResult()
if (result.bot.detected) { console.warn(`Bot detected (confidence ${result.bot.confidence})`) showCaptcha() return}
await login(credentials)На своєму сервері дійте за доставкою вебхука. Вердикт щодо бота
міститься в об’єкті bot — bot.result і bot.type:
// `event` is the webhook delivery body (/docs/webhooks)app.post("/webhook/tracio", async (req, res) => { const event = req.body
if (event.bot?.result === "bot") { await db.blockedRequests.insert({ visitorId: event.visitorId, botType: event.bot.type, ip: event.ip, timestamp: new Date(), }) }
res.status(200).send("OK")})Нульові та порожні значення в payload опускаються, тож читайте bot.type захисно,
а не робіть його обов’язковим у своїх схемах.
Виявлення ботів TRACIO спроєктоване для майже нульової кількості хибних спрацювань, але граничні випадки можливі:
| Сценарій | Ризик | Заходи |
|---|---|---|
Розширення браузера, що змінюють navigator | Низький | Крос-валідація за багатьма перевірками не дає спрацювати одній-єдиній |
| Корпоративне захисне ПЗ | Дуже низький | Класифікація headless вимагає підтверджувальних свідчень |
| Інструменти доступності | Відсутній | API доступності не живлять виявлення ботів |
| Користувачі VPN/проксі | Відсутній | Мережеві прапорці відстежуються окремо від вердикту щодо бота |
Якщо ви стикаєтеся з хибними спрацюваннями, вивчіть bot.type (і reasons на
Business та вище), щоб зрозуміти, який клас спостереження спрацював, і скоригуйте
свою політику. Поширені причини — у розділі Усунення несправностей.