Use Cases

Как работает обнаружение CAPTCHA в собственных приложениях

Безопасный scope: руководство применимо только к собственным или явно авторизованным средам — QA, staging и production вашей команды. Речь о диагностике, тестировании и наблюдаемости за вашей же CAPTCHA-интеграцией, а не о сторонних сайтах и не о несанкционированных сценариях.

Собственное приложение показывает CAPTCHA не случайно: провайдер проверки складывает несколько сигналов — репутацию IP, аккуратность заголовков, поведение пользователя и целостность сессии — и включает проверку, когда их сумма выходит за порог. Если понимать, из чего этот порог складывается, вы настроите проверку так, чтобы она реагировала на подозрительный трафик и не мешала обычным пользователям. А в QA те же сигналы можно воспроизвести заранее и отладить поведение формы до релиза.

Из чего складывается «подозрительность» трафика

Современные анти-бот-системы работают слоями. Ни один сигнал по отдельности обычно не вызывает проверку — CAPTCHA появляется, когда несколько признаков совпадают и общий уровень доверия падает.

Репутация IP и сети

Самый простой и частый триггер. Слишком много запросов в минуту с одного адреса, известный датацентровый диапазон, географическое несоответствие между IP и остальными сигналами — всё это поднимает уровень проверки. Резидентные адреса снижают частоту срабатываний, но не отменяют её: если остальные сигналы выглядят автоматизированными, проверка всё равно появится.

HTTP-заголовки

Сервер читает заголовки запроса и ищет признаки автоматизации:

  • User-Agent от библиотеки (python-requests, дефолтные строки) — мгновенный флаг;
  • отсутствие Accept-Language — типично для бота;
  • пустой Referer на глубокой странице — подозрительно;
  • отсутствие session-cookie — «новый» или машинный посетитель.

Поведение пользователя

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

Окружение браузера

Анти-бот запускает JavaScript и проверяет, похоже ли окружение на обычный пользовательский браузер: набор плагинов, языки, параметры WebGL и canvas. Автоматизированный тестовый браузер выглядит иначе, чем браузер живого пользователя, — это нормально для QA, но именно поэтому в staging проверка срабатывает чаще.

Cookies и сессия

Сайт ставит трекинговые cookie и при следующем визите сверяет их: согласованы ли значения, не были ли изменены, не началась ли «свежая» сессия на пустом месте. Отсутствующие или несогласованные cookie повышают уровень подозрительности.

Как reCAPTCHA v3 назначает score

reCAPTCHA v3 работает невидимо и присваивает каждому визиту оценку доверия от 0,0 (похоже на бота) до 1,0 (похоже на человека):

Диапазон score Трактовка Действие
0,7 – 1,0 Скорее человек Пропустить
0,3 – 0,7 Неопределённо Возможна CAPTCHA
0,0 – 0,3 Скорее бот Блок или CAPTCHA

На оценку влияют окружение JavaScript, характер взаимодействия, история cookie Google, репутация IP и время на странице. Когда score низкий, сайт может показать задачу reCAPTCHA v2. CaptchaAI решает обе версии — это удобно, когда в тестовом стенде нужно пройти проверку и продолжить сценарий.

Как Cloudflare решает, показать ли проверку

Bot Management у Cloudflare выбирает реакцию по репутации и результатам браузерных тестов: интерстициальная JS-проверка, managed challenge с виджетом Turnstile для пограничного трафика или прямой блок для заведомо вредоносных адресов. CaptchaAI решает и виджеты Turnstile (method=turnstile), и полные страницы challenge (method=cloudflare_challenge), поэтому в QA можно проверять оба пути.

Как применить это в QA собственного приложения

Если ваше приложение неожиданно показывает CAPTCHA даже лояльным пользователям — это сигнал, что сессия нестабильна. Проверьте срок жизни cookie, корректность параметра action в reCAPTCHA v3 и последовательность вызовов виджета. Часто причина — не «злой» трафик, а гонка при инициализации или потерянный между шагами cookie.

Тестовые сценарии для staging

Все сценарии выполняются только на собственной staging-странице:

  1. baseline — стабильная сессия, ожидаем отсутствие CAPTCHA;
  2. «свежий клиент» — пустые cookie, ожидаем появление проверки;
  3. смена IP в середине сессии;
  4. высокая частота действий из одной сессии.

Каждый сценарий фиксируется в логах, чтобы результат можно было сравнить между сборками.

Логи и наблюдаемость

Структурированные логи позволяют сравнивать поведение CAPTCHA между релизами и быстро находить регрессии в собственных формах:

import json, time, logging

log = logging.getLogger('captcha-qa')

def record(event: str, **fields) -> None:
    payload = {'ts': time.time(), 'event': event, **fields}
    log.info(json.dumps(payload, ensure_ascii=False))

Минимальный набор полей на каждую попытку: slug, captcha_type, task_id, wait_seconds, verify_status, env. Этого достаточно, чтобы построить дашборд с медианой, P90 и P99 по типу CAPTCHA и по среде и увидеть, где после релиза выросло время решения или доля ошибок.

Диагностика частых проблем

Симптом Что проверить
CAPTCHA постоянно для лояльных пользователей Срок жизни и согласованность cookie, стабильность сессии
CAPTCHA не появляется в QA Принудительно включите проверку на staging-стенде
Низкий или сбрасывающийся score в v3 Параметр action и порядок инициализации виджета
Расхождение поведения staging и prod Сверьте sitekey, pageurl и конфигурацию окружения

Локальный контекст: регионы и персональные данные

Для команд в России, Беларуси, Казахстане и Украине время решения зависит ещё и от того, откуда идут запросы: разброс RTT между европейскими и центральноазиатскими регионами хостинга заметно влияет на замеры, поэтому фиксируйте регион стенда рядом с метриками времени. Если сценарий связан со сбором данных, добавьте в чек-лист одну строку про диету по данным — собирайте только то, что вправе обрабатывать (для РФ ориентир — 152-ФЗ «О персональных данных»); это вопрос вашей ответственности, а не характеристика CaptchaAI.

Отдельный практичный аргумент для фрилансеров и агентств, которые выставляют счета в нестабильной локальной валюте, — предсказуемая тарификация по потокам в долларах: например, BASIC ($15/мес, 5 потоков) даёт фиксированную месячную стоимость без оплаты за каждое решение, что упрощает планирование бюджета тестового стенда.

Чек-лист безопасного QA

  • Запросы уходят только на собственные или авторизованные endpoints.
  • Тестовые учётные записи, события и платежи помечены как фиктивные.
  • CAPTCHA-токен проверяется на собственном backend, а не принимается на доверии от клиента.
  • Логи содержат task_id, тип CAPTCHA, время ожидания и результат pass/fail.
  • Скрипт возвращает корректный exit code, чтобы CI мог принять решение по сборке.

Частые вопросы

Можно ли применять этот подход к сторонним сайтам?

Нет. Описанные сценарии работают только для собственных или явно авторизованных сред. Для чужого ресурса нужно письменное разрешение владельца — иначе это выходит за рамки допустимого использования.

Почему собственное приложение показывает CAPTCHA даже лояльным пользователям?

Чаще всего дело в нестабильной сессии: истекают или теряются cookie, сбивается порядок инициализации виджета, некорректно передаётся action в reCAPTCHA v3. Проверьте эти три места прежде, чем винить трафик.

Как принудительно вызвать проверку в staging?

Обнулите cookie, стартуйте «свежую» сессию, повысьте частоту запросов из одного контекста или включите режим повышенной чувствительности на тестовом стенде. Так вы воспроизведёте условия, при которых провайдер показывает CAPTCHA.

Что делать, если CaptchaAI вернул ошибку в тестовом прогоне?

Залогируйте task_id, тип CAPTCHA и текст ошибки, повторите запрос с экспоненциальной задержкой и следите за долей ошибок на дашборде. Устойчивый рост ошибок — повод сверить sitekey и страницу проверки.

Как сравнивать поведение CAPTCHA между релизами?

Сохраняйте логи в одном формате и стройте отчёт по медиане, P90 и P99 на одинаковом наборе сценариев. Сравнивать имеет смысл только сопоставимые выборки в одной и той же собственной среде.

Связанные руководства

Хотите, чтобы CAPTCHA предсказуемо вела себя в вашем приложении? Подключите CaptchaAI.

Комментарии для этой статьи отключены.