Comparisons

Управление ботами Cloudflare и Cloudflare Turnstile: понимание разницы

Автоматизация упирается либо в 403, либо в виджет с проверкой — это два разных продукта Cloudflare.

Коротко: в чём разница

  • Turnstile — бесплатный JS-виджет на конкретной форме, работает без Cloudflare DNS и есть на любом тарифе.
  • Bot Management — часть Enterprise-тарифа, оценивает на уровне сети вообще каждый запрос к домену.
  • Для Turnstile автоматизации достаточно решить виджет; для Bot Management сначала нужно пройти сетевую проверку, и только потом при необходимости — CAPTCHA-компонент.

Пример из практики: почему Managed Challenge чаще ловят команды из СНГ

QA-команды, которые гоняют тесты с серверов в европейских дата-центрах (Франкфурт, Амстердам) — стандартный выбор для компаний из России, Беларуси и Казахстана, — регулярно получают Managed Challenge там, где обычный пользователь прошёл бы незаметно.

Причина не в стране, а в диапазоне IP:

  • адреса облачных дата-центров получают более низкий Bot Score, чем адреса домашних провайдеров;
  • решение Turnstile или Cloudflare Challenge стоит закладывать в пайплайн заранее, а не чинить постфактум.

При автоматизированной проверке чужого сайта разумно собирать только данные, которые вы вправе обрабатывать — от 152-ФЗ для российских проектов до должной проверки на соответствие GDPR для кросс-граничных команд.


Turnstile или Bot Management: сравнение по цене и развёртыванию

Параметр Bot Management Cloudflare Turnstile
Что это Платформа защиты от ботов в составе Enterprise-тарифа Бесплатный виджет вместо капчи
Стоимость Только Enterprise-тариф Cloudflare ($$$) Бесплатно на любом тарифе
Уровень развёртывания Сеть (прокси Cloudflare перед origin) JavaScript-виджет на странице
Нужен ли Cloudflare DNS Да Нет — работает на любом сайте
Когда показывается вызов Иногда (Managed Challenge) Редко, обычно проходит незаметно

А вот что каждый продукт видит и на что реагирует:

Параметр Bot Management Cloudflare Turnstile
Что проверяется Каждый запрос к домену Конкретное действие: отправка формы и т. п.
Оценка Bot Score от 1 до 99 на запрос Pass / fail на один вызов
Связь с WAF Да, правила триггерятся по Bot Score Нет
JS-проверка Да, «Checking your browser», ~5 секунд Да, proof-of-work в фоне
Rate limiting Да Нет
Что решает CaptchaAI Managed Challenge — методами turnstile / cloudflare_challenge Да, с высокой долей успешных решений

Как работает Cloudflare Bot Management

Bot Management — часть Enterprise-тарифа Cloudflare: сеть оценивает каждый запрос к домену до того, как он попадёт на origin-сервер.

Из чего складывается Bot Score

Такую цепочку проходит каждый запрос до вынесения оценки:

Request arrives at Cloudflare edge
    ↓
Bot Management engine evaluates:
  ├─ Machine learning model (behavioral сигналы браузера)
  ├─ Heuristics (known bot patterns)
  ├─ JavaScript сигналы браузераing (if JS challenge triggered)
  ├─ JA3/JA4 TLS сигналы браузера
  ├─ HTTP header analysis
  └─ IP reputation (Cloudflare sees ~20% of internet traffic)
    ↓
Bot score assigned: 1 (definitely bot) to 99 (definitely human)
    ↓
WAF rules act on the score:

  - Score > 50 → Allow
  - Score 30-50 → Managed challenge
  - Score < 30 → Block or JavaScript challenge

Из каких модулей состоит Bot Management

  • Bot Score — ML-оценка для каждого запроса.
  • Managed Challenge (управляемый вызов) — адаптивно показывает JS-вызов или виджет Turnstile.
  • Super Bot Fight Mode — упрощённый режим для тарифов Pro/Business.
  • Bot Analytics — дашборд с ботовым и человеческим трафиком.
  • WAF Custom Rules — правила, которые срабатывают по порогу Bot Score.
  • Rate Limiting — пороги частоты запросов на IP или сессию.
  • JavaScript Detection — определение headless-браузеров и инструментов автоматизации.

Что видит автоматизация, если сайт защищён Bot Management

Что происходит Что это значит
Жёсткая блокировка (403) Bot Score слишком низкий, сработало правило WAF
JS-страница проверки «Checking your browser», обычно около 5 секунд
Managed Challenge Показан виджет Cloudflare Turnstile или JS-вызов
Невидимый проход Запрос пропущен, Bot Score оказался достаточно высоким

Cloudflare Turnstile: бесплатный виджет вместо капчи

Turnstile — самостоятельный продукт, а не модуль Bot Management: виджет работает на любом сайте, даже без Cloudflare DNS.

Как Turnstile проверяет пользователя

Проверка укладывается в фоновую цепочку без участия пользователя:

Page loads Turnstile widget
    ↓
Widget runs background checks:
  ├─ Browser proof-of-work challenge (cryptographic puzzle)
  ├─ Private Access Token (Apple devices)
  ├─ Browser environment validation
  └─ Cloudflare threat intelligence
    ↓
Result: cf-turnstile-response token generated
    ↓
Token submitted with form data
    ↓
Server validates token via Cloudflare API (siteverify)

Режимы виджета

  • Managed — Cloudflare сам решает: невидимо или интерактивно; подходит большинству форм по умолчанию.
  • Non-interactive — всегда невидим, только proof-of-work; для форм с минимумом трения.
  • Invisible — виджет не отображается и запускается при загрузке страницы; для фоновой проверки.

Как встраивается Turnstile

Минимальная разметка виджета:

<!-- Simple Turnstile integration -->
<div class="cf-turnstile" data-sitekey="0x4AAAAAAAC3DHQhMMQ_Rxrg"></div>
<script src="https://challenges.cloudflare.com/turnstile/v0/api.js" async defer></script>

Решаем Turnstile и Bot Management через CaptchaAI

Turnstile: решение напрямую

Turnstile решается методом turnstile CaptchaAI без дополнительных шагов, с высокой долей успешных решений:

import requests
import time

API_KEY = "YOUR_API_KEY"

submit = requests.post("https://ocr.captchaai.com/in.php", data={
    "key": API_KEY,
    "method": "turnstile",
    "sitekey": "0x4AAAAAAAC3DHQhMMQ_Rxrg",
    "pageurl": "https://example.com/signup",
    "json": 1,
})

task_id = submit.json()["request"]

for _ in range(60):
    time.sleep(5)
    result = requests.get("https://ocr.captchaai.com/res.php", params={
        "key": API_KEY,
        "action": "get",
        "id": task_id,
        "json": 1,
    }).json()

    if result.get("status") == 1:
        token = result["request"]
        print(f"Turnstile token: {token[:50]}...")
        break

Bot Management: решение по слоям

Bot Management объединяет несколько уровней защиты, и решение CAPTCHA — только последний из них:

  • корректные заголовки запроса и TLS-отпечаток клиента;
  • ротация IP-адресов при высокой частоте запросов;
  • решение managed challenge, который обычно рендерится виджетом Turnstile.
# Bot Management flow for automation:

# 1. Make initial request
response = requests.get("https://protected-site.com/api/data")

# 2. Check if challenged
if response.status_code == 403:
    # Hard block — need to adjust headers, proxy, or approach
    pass
elif "challenge" in response.text.lower() or response.status_code == 503:
    # JavaScript challenge or managed challenge
    # If it contains a Turnstile widget, solve it:
    if "cf-turnstile" in response.text or "challenges.cloudflare.com" in response.text:
        # Extract sitekey and solve via CaptchaAI
        sitekey = extract_turnstile_sitekey(response.text)
        token = solve_turnstile(sitekey, "https://protected-site.com/api/data")

Если сетевая проверка уже пройдена, дальше остаётся только виджет.

Cloudflare Challenge — это не Turnstile

«Checking your browser» — это JS-вызов Cloudflare Challenge, отдельный от Turnstile. CaptchaAI решает его тем же вызовом API:

submit = requests.post("https://ocr.captchaai.com/in.php", data={
    "key": API_KEY,
    "method": "turnstile",
    "sitekey": "managed",
    "pageurl": "https://protected-site.com/login",
    "json": 1,
})

Как отличить Bot Management от Turnstile по признакам

Пять сигналов ниже отличают Bot Management от Turnstile без разбора исходного кода:

  • 5-секундная страница «Checking your browser» → Bot Management, JS-вызов (jschl_vc, challenge-маркеры в коде).
  • Виджет с проверкой на форме → Turnstile отдельно (класс cf-turnstile, домен challenges.cloudflare.com/turnstile).
  • 403 на странице ошибки Cloudflare → Bot Management, жёсткий блок (заголовок cf-ray, шаблон ошибки).
  • Интерактивный чекбокс на странице Cloudflare → Managed Challenge (домен challenges.cloudflare.com).
  • Видимых проверок нет, но выставлены cookie → Bot Management, запрос пройден (cookie cf_clearance).

Скрипт для автоматической проверки

Логика из таблицы выше укладывается в одну функцию:

import requests

def identify_cloudflare_protection(url):
    """Identify which Cloudflare protection a URL uses."""
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) "
                      "AppleWebKit/537.36 Chrome/120.0.0.0",
    }

    response = requests.get(url, headers=headers, timeout=15, allow_redirects=False)
    html = response.text

    result = {
        "cloudflare_protected": "cf-ray" in response.headers.get("cf-ray", "")
                                or "cloudflare" in response.headers.get("server", "").lower(),
        "bot_management_challenge": False,
        "turnstile_widget": False,
        "hard_block": False,
        "passed": False,
    }

    if response.status_code == 403:
        result["hard_block"] = True
    elif response.status_code == 503 and "jschl" in html:
        result["bot_management_challenge"] = True
    elif "cf-turnstile" in html:
        result["turnstile_widget"] = True
    elif response.status_code == 200:
        result["passed"] = True

    return result

Часто задаваемые вопросы

Как быстро понять, что передо мной — Turnstile или Bot Management?

Смотрите на область защиты:

  • DNS через Cloudflare и оценка всех запросов к домену — это Bot Management;
  • проверка внутри одной формы, независимо от того, кто держит DNS, — это Turnstile.

Нужен ли сайту Enterprise-тариф Cloudflare, чтобы моя автоматизация встретила Bot Management?

Тариф выбирает владелец сайта, а не ваша автоматизация:

  • если целевой сайт на Cloudflare Enterprise, ваши запросы получат Bot Score;
  • это не зависит от того, чем вы пользуетесь на своей стороне.

Может ли Turnstile стоять на сайте вообще без Bot Management?

Да, и это самый частый случай:

  • Turnstile доступен на любом тарифе Cloudflare, включая бесплатный;
  • большинство сайтов ставит его на формы входа и регистрации, вообще не подключая Enterprise-защиту.

Что делать, если автоматизация вместо CAPTCHA получает 403?

403 — это жёсткая сетевая блокировка, а не задача CAPTCHA, и метод CaptchaAI её не решит. Порядок действий:

  1. Проверьте заголовки запроса и TLS-отпечаток клиента.
  2. Настройте ротацию IP-адресов.
  3. Только когда запрос перестанет блокироваться на входе, решайте managed challenge или виджет через CaptchaAI.

CaptchaAI решает обе проверки?

CaptchaAI решает виджет Turnstile и связанный с ним Managed Challenge с высокой долей успешных решений. Жёсткая блокировка Bot Management на сетевом уровне (403) — это не CAPTCHA-задача: тут нужна корректная настройка запроса на вашей стороне, а CaptchaAI подключается уже на этапе решения самой проверки.


Главное

  • Bot Management — Enterprise-защита сети: ML-оценка, WAF и поведенческий анализ на каждый запрос к домену.
  • Turnstile — бесплатный виджет, проверяющий конкретное действие через proof-of-work в браузере.
  • Виджет Turnstile решается напрямую через CaptchaAI с высокой долей успешных решений.
  • Для Bot Management сначала нужна корректная имитация браузера, а CaptchaAI решает уже CAPTCHA-компонент.

Похожие статьи

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