Обнаружение ботов в TRACIO выявляет автоматизированные браузеры, headless-инструменты и скриптовые атаки с помощью двухслойной архитектуры: клиентский сбор в браузерном агенте и серверный анализ. Оно покрывает распространённые фреймворки автоматизации, headless-браузеры, ИИ-агенты для веб-сёрфинга и антидетект-браузеры с почти нулевым уровнем ложных срабатываний, автоматически добавляя легитимные поисковые краулеры в 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 | Опознан названный ИИ-агент для веб-сёрфинга |
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 и ИИ-агентов | Все тарифы |
| Allowlist верифицированных краулеров | Все тарифы |
| Обнаружение эмуляторов | Все тарифы |
Индикаторы антидетекта (bot.antidetectScore, 0..100) | Pro и выше |
| Коды причин, поведенческий блок | Business и выше |
| Обнаружение DevTools | Business и выше |
Оценка антидетекта ещё калибруется.
bot.antidetectScoreсообщается, чтобы вы могли наблюдать за ним и настраивать собственную политику — воспринимайте его как вход в ваше решение о риске, а не как самостоятельное основание для блокировки.
Проверки только для мобильных не работают в вебе. Обнаружение root, jailbreak, клонированных/сдвоенных приложений и Frida опирается на нативные мобильные сигналы, которые браузер собрать не может. TRACIO поставляет только браузерные SDK, поэтому полагайтесь на вердикты по автоматизации, headless, ИИ-агентам, антидетекту, эмуляторам и поведению — они полностью активны в вебе.
Известные «хорошие» боты распознаются по их 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 и выше), чтобы понять, какой класс наблюдения сработал, и скорректируйте
свою политику. Частые причины — в разделе Устранение неполадок.