Если посмотреть на любой публичный сайт без защиты, 30-60% входящего трафика — не люди. Это поисковые краулеры, мониторинговые боты, скраперы цен, чекеры доменов, парсеры от конкурентов и куча всего ещё. Часть из них безобидна и даже полезна (Googlebot), часть мешает (скраперы), а часть прямо вредит — заваливают лидген-формы, открывают рекламу и сжигают бюджет.

Антибот — это не одна кнопка «включить защиту». Это четыре отдельных слоя, каждый из которых ловит свой класс ботов. Глупый бот валится на первом, чуть умнее — на втором, и так далее. В этом тексте — как они устроены и какой слой что делает на пальцах, без архитектурного занудства.

Если коротко

Четыре слоя: IP-репутация ловит ~40% самых тупых ботов, user-agent ещё ~20%, JS-fingerprint добивает до 95%, поведенческие сигналы закрывают остаток. CAPTCHA работает, но раздражает пользователей и в 2026-м уже не нужна для большинства сценариев — четырёх слоёв достаточно.

Почему одни IP-листы перестали работать

В 2010-х классический способ был такой: купить базу плохих IP-адресов (или скачать список от MaxMind / AbuseIPDB) и блокировать запросы с них. Работало неплохо: ботнеты сидели на одних и тех же диапазонах, прокси-сервисы пересекались, и одна большая база ловила процентов 70 мусора.

Сегодня всё иначе. Резидентные прокси-сети («чистые» айпи частных пользователей, сданные в аренду через сомнительные расширения браузера) дают плохому боту IP, неотличимый от настоящего человека из Чикаго. Стоит это $0.50 за гигабайт трафика. То есть бот, который годом раньше валился на IP-фильтре, теперь приходит к вам как обычный визитор.

При этом IP-репутация всё ещё нужна как первый слой — она ловит ленивых ботов, дешёвые сервера, известные ботнеты и сканеры. Просто полагаться на неё одну больше нельзя.

Четыре слоя по порядку

Слой 1. IP-репутация и сетевой контекст

Первое, что проверяем при заходе: откуда пришёл запрос. Слой смотрит:

  • Тип сети — residential, datacenter, mobile, hosting, VPN. Datacenter без причины — подозрительно, особенно для рекламного трафика.
  • ASN — конкретного провайдера. Известные «грязные» ASN (хостинги, на которых разворачивают ботнеты) — в чёрный список целиком.
  • История этого IP — было ли с него подозрительное поведение за последние 30 дней.
  • Геосовпадение — соответствует ли страна по IP стране, заявленной в часовом поясе и языке браузера.

Этот слой бесплатный по латенси: проверка занимает 2-3 мс, потому что вся база лежит в памяти. Ловит примерно 35-45% всего бот-трафика в средней рекламной кампании. Дальше идут те, кто пробрался через первый фильтр.

Слой 2. User-agent и HTTP-сигналы

Бот может прийти с чистого residential-IP, но забыть подделать заголовки. Смотрим:

  • UA — известные плохие подписи (python-requests, curl, HeadlessChrome, PhantomJS) идут в отказ сразу.
  • Полноту заголовков — настоящий браузер шлёт Accept, Accept-Language, Accept-Encoding, Sec-CH-UA, DNT, Upgrade-Insecure-Requests в определённой последовательности. Бот часто шлёт три из десяти.
  • TLS-fingerprint (JA3/JA4) — рукопожатие TLS-сессии у настоящего Chrome выглядит ровно так, у Firefox — иначе, у Python-requests — третьим способом. Подделать это можно, но 90% ботов не парятся.
  • HTTP/2 или HTTP/3 — современные браузеры используют их по умолчанию для всех публичных сайтов. Бот на HTTP/1.1 в 2026-м — флаг.

Этот слой ловит дополнительные 15-25% трафика — тех, кто справился с IP, но запалился на заголовках.

Слой 3. JavaScript-fingerprint

Самый интересный и самый коварный для бота. Когда страница загрузилась, мы выполняем небольшой JS, который собирает с десяток сигналов про браузер: версия движка, разрешение экрана, доступные шрифты, поддерживаемые WebGL-расширения, тайминги Canvas-рендера, audio-context, наличие сенсоров на устройстве и так далее.

Все эти сигналы вместе складываются в fingerprint — уникальную подпись браузера. У реального Chrome 131 на Mac она одна, у Headless Chrome 131 — чуть другая (Headless отдаёт navigator.webdriver = true, иначе считает Canvas-пиксели, нет некоторых шрифтов). У Selenium-Chrome — третья. У бота на голом Node — четвёртая.

В TDS у нас база из 2.3 миллиарда известных fingerprint-паттернов, которые мы пересчитываем каждые 48 часов на свежем трафике. Если ваш fingerprint похож на тот, что вчера показал откровенно ботовое поведение, — это сигнал. Если он совпадает с тысячами других fingerprint-ов с одинаковой подписью, что бывает у automation-фреймворков, — тоже сигнал.

Что мы наблюдаем

Самый частый «детский» баг ботоводов — забывают про random между запросами. У Selenium-бота без рандомизации viewport, языка и сенсоров получается ровно один fingerprint на все 50 тысяч кликов. Это не fingerprint, это автограф. Мы такое видим раз в неделю в логах.

Этот слой добивает до 92-96% покрытия. Остаются самые качественные боты — те, кто маскируется под обычного пользователя на резидентном IP с подделанными заголовками и рандомизированным fingerprint. Это уже редкие звери, стоят дорого, и приходят они в основном из категории целевых атак (например, конкурент в перформанс-маркетинге, который специально вас скликивает).

Слой 4. Поведенческие сигналы

Финальный рубеж. Запускается уже после того, как пользователь зашёл и начал что-то делать. Смотрим:

  • сколько прошло между загрузкой страницы и первым движением мыши (у бота — 0 мс или ровно 100);
  • траекторию движения (у человека кривая, дрожащая; у бота — прямая или с шумом по слишком ровной кривой);
  • скорость скролла, паузы между скроллами;
  • наличие касаний экрана (у мобильного пользователя — есть, у эмулятора — обычно нет);
  • длительность пребывания и hover на CTA до клика.

Поведенческие сигналы собираются 3-5 секунд и потом усредняются в behavior-score. Если score низкий — следующий клик от этого fingerprint-а пометится как подозрительный заранее. Так слой 4 «учит» слой 3 — fingerprint попадает в локальный watchlist.

Как это выглядит на 100 000 кликов

Реальная сводка по одной рекламной кампании за неделю:

Всего входящих кликов:         100,000   (100.0%)
├─ Отсеяно слой 1 (IP):         38,400   ( 38.4%)
├─ Отсеяно слой 2 (UA):         18,200   ( 18.2%)
├─ Отсеяно слой 3 (fingerprint):29,800   ( 29.8%)
├─ Отсеяно слой 4 (behavior):    8,500   (  8.5%)
└─ Прошли все слои (люди):       5,100   (  5.1%)

Цифры в этой кампании были экстремальные — она шла в Tier-3 гео, где ботового трафика традиционно много (~95%). На Tier-1 кампаниях бот-доля обычно 25-50%, и проценты на каждом слое сдвигаются. Но соотношение слой 1 > 2 > 3 > 4 держится в большинстве кейсов.

Почему мы не используем CAPTCHA по умолчанию

Reusable CAPTCHA (reCAPTCHA, hCaptcha, Turnstile) — рабочий пятый слой. Но у неё три минуса:

  • UX-цена. Каждая капча роняет конверсию на 5-15%. Никто не любит выбирать автобусы на картинках.
  • AI-агенты её решают. К 2026-му годовые LLM-агенты типа GPT-4o с computer use решают reCAPTCHA v2 точностью 87%. Капча перестала быть последней линией обороны.
  • Передача данных третьей стороне. Google и Cloudflare видят все ваши клики. Для маркетинговой аналитики это нормально, для редиректов с приватным трафиком — не всегда приемлемо.

Капча оправдана в двух случаях: (а) если четырёх слоёв уже мало (целевые атаки, скликивание конкурентом), (б) при защите финансовых форм (платёжная страница, регистрация в банке), где false negative дороже UX-потерь. В остальных случаях четырёх слоёв хватает с запасом.

Вывод

Антибот в 2026-м — это четыре слоя, работающие последовательно: IP-репутация → HTTP-сигналы → JS-fingerprint → поведение. Один слой не справится — нужно все четыре. CAPTCHA не обязательна и часто вредит.

Если интересно копнуть глубже в третий слой и понять, как именно собираются и сравниваются fingerprint-ы — у нас есть отдельная архитектурная статья: JS-fingerprint vs IP-блок.