Хорошая идея — user‑agent + IP/подсети как базовый фильтр. Но этого обычно недостаточно: злоумышленники подделывают UA и используют прокси/ротаторы. Ниже — набор дополнительных эффективных и хорошо сочетаемых методов защиты от ботов (без Yandex‑captcha).
Коротко — стратегия: многоуровневый подход (пассивная детекция → активные проверки → сервисы/блокировка), постепенная эскалация санкций и постоянный мониторинг/обучение правил.
1) Поведенческий анализ (behavioral)
- Отслеживание скорости запросов, последовательностей URL, типичных паттернов (например, очень быстрая навигация без загрузки ресурсов).
- Анализ событий на клиенте: время между кликами, движение мыши/тапы, прокрутки.
- Выдавать «риск‑оценку» с порогами: логирование → замедление → требование проверки.
2) JavaScript‑челленджи и выполнение кода в браузере
- Требовать выполнения JS (вставка token на странице, проверка наличия куки/токена при последующих запросах). Большинство простых ботов не исполняют JS.
- Использовать динамические токены (nonce) на каждой странице, проверять их на сервере.
3) Device / browser fingerprinting
- Собирайте комбинацию: user agent, заголовки, разрешение экрана, canvas/WebGL fingerprint, шрифты, timezone, языки.
- JA3/JA3S TLS‑fingerprinting для определения headless/скриптовых клиентов на уровне TLS.
- Сопоставляйте fingerprint с IP/сессией — если меняется слишком быстро — подозрительно.
4) Проверки headless браузеров и автоматизации
- Проверять navigator.webdriver, специфичные свойства для Puppeteer/Playwright или Selenium, обнаруживать отсутствующие ресурсы/плагины и т.п.
- Использовать «canary» JS‑проверки (например, специфичные тайминги, которые ломаются в headless).
5) Honeypots и скрытые поля
- Спрячьте поля формы (CSS display:none или aria-hidden) — нормальный пользователь их не заполнит, бот — может.
- Спрячьте эндпоинты (т.н. honey endpoints): боты часто перебирают URL и попадут в них — можно банить.
6) Rate limiting / throttling
- Ограничение запросов по IP/подсети/аккаунту по стратегиям token bucket.
- Sliding window, leaky bucket — для разных типов действий разные лимиты (просмотры страниц vs посты/формы).
- «Soft» режим: первая ступень — замедление ответов, вторая — временная блокировка.
7) Progressive challenges (эскалация)
- Сначала JS‑челлендж → при подозрении — лёгкая задача (например, Turnstile, FriendlyCaptcha или hCaptcha) → при высокой вероятности — более строгие меры.
- Использовать более мягкие меры для незарегистрированных/новых пользователей.
8) CAPTCHA‑альтернативы и сервисы (не Yandex)
- Cloudflare Turnstile (privacy‑friendly, без визуальной капчи), Google reCAPTCHA, hCaptcha, FriendlyCaptcha, Arkose Labs (risk‑based). Каждый имеет плюсы/минусы по приватности и стоимости.
- Рассмотрите proof‑of‑work (криптографическая нагрузка) для автоматического замедления ботов.
9) WAF и коммерческие bot‑management решения
- Cloudflare Bot Management, Akamai Bot Manager, PerimeterX, DataDome — дают готовые сигнатуры, ML‑детекцию, JS‑челленджи, скорость внедрения.
- Подключение CDN/WAF также снижает нагрузку от DDoS и даёт встроенные rate limits.
10) IP репутация и блоклисты
- Использовать коммерческие/открытые базы IP‑репутации, TOR/анонимайзеры, прокси‑списки.
- Автоматически помечать и блокировать подозрительные подсети — но аккуратно, чтобы не заблокировать легитимных пользователей.
11) Защита форм и аутентификации
- Для входа/регистрации: ограничение попыток, временные блокировки, MFA/2FA для критичных операций, email/phone подтверждение.
- Использовать одноразовые токены (CSRF + timebound tokens) при отправке форм.
12) Серверные и сетевые меры
- Nginx/HAProxy rate limiting, fail2ban, iptables, connection throttling, SYN‑cookies.
- Ограничение одновременных соединений, настройка keepalive и timeouts.
13) Логирование, метрики и feedback loop
- Центральный логинг (ELK/Prometheus) с тегами «приподозренный бот».
- Метрики: количество блокировок, false positive жалобы, latency, пропускная способность.
- Постоянно корректируйте правила по результатам.
14) User experience и риск ложных срабатываний
- Всегда иметь лёгкий путь для легитимного пользователя обойти проверку (например, подтверждение по email, «я не робот» минимальный флоу).
- Белые списки для известных краулеров (Googlebot, Bingbot) — сверяйте по reverse DNS + IP.
15) Правовые и этические аспекты
- Убедитесь, что блокировки соответствуют политике приватности, уведомлениям пользователей и местным законам (особенно при сборе fingerprinting).
Пример порядка внедрения (практичный план)
1. Включить и настроить подробный логинг и метрики бот‑трафика.
2. Ввести базовые rate limits и блокировку явных bad‑IP/списков.
3. Добавить JS‑челлендж/токены + honeypots на формы.
4. Внедрить fingerprinting и поведенческую аналитику, начать помечать трафик.
5. Настроить progressive challenges и CAPTCHA/Turnstile для подозрительного трафика.
6. При необходимости подключить коммерческий bot‑management или WAF.
7. Постоянно мониторить ложные срабатывания и корректировать.
Советы по тестированию
- Проводите A/B или «soft block» режим перед жёсткими блокировками.
- Тестируйте на реальных сценариях: мобильные сети, прокси, корпоративные NAT.
- Поддерживайте blacklist/whitelist и механизм разблокировки по жалобам.
Если хотите — могу:
- Помочь составить конкретный набор правил nginx/Cloudflare под ваш сайт.
- Предложить чеклист для тестирования ложных срабатываний.
- Описать пример реализации JS‑челленджа и fingerprinting (код).
Напишите: какой у вас стек (сервер, CDN, количество трафика, типы атак), и я подскажу оптимальную комбинацию мер.