Сравнения

Проверка целостности браузера Cloudflare и вызов CAPTCHA

Cloudflare предлагает две различные меры защиты, которые разработчики часто путают: Проверка целостности браузера (BIC) и Проблемы CAPTCHA. BIC — это пассивная проверка на уровне заголовка, которая без каких-либо проблем блокирует явно небраузерный трафик — она просто возвращает код 403. Задачи CAPTCHA (Cloudflare Turnstile, проблемы JavaScript, управляемые задачи) представляют собой решаемую задачу, которую могут пройти законные браузеры. Это различие имеет значение, поскольку для каждого из них требуется своя стратегия обращения.


Как они сравниваются

Особенность Проверка целостности браузера Капча вызов
Что он проверяет Только HTTP-заголовки Поведение браузера + среда
Требуется JavaScript? Нет (уровень заголовка) Да
Пользователь видит Ничего (пройдено) или 403 (не пройдено) Виджет конкурса или страница JS
Состояние HTTP при сбое 403 503
Решаемо? Нет — исправьте заголовки, иначе они заблокируются Да — решить CAPTCHA
Файл cookie выпущен Нет qa_validation_cookie
CaptchaAI нужен? Нет — исправить заголовки запросов Да
Включено по умолчанию Да (все планы Cloudflare) Нет (настраивается для каждого правила)
Относится к Каждый запрос Соответствие только правилам WAF

Проверка целостности браузера (BIC)

BIC оценивает заголовки HTTP-запросов для обнаружения явно небраузерного трафика. Он запускается перед любым вызовом JavaScript или CAPTCHA.

Что проверяет БИК

Проверять Что он ищет Распространенные неисправности
Проверка пользовательского агента Отсутствующий, пустой или заведомо плохой UA python-requests/2.31, локон, wget
Порядок заголовка Заголовки в необычном порядке Небраузерные HTTP-библиотеки
Отсутствуют заголовки браузера Accept, Accept-Language, Accept-Encoding отсутствуют Минимальные HTTP-клиенты
Известные сигнатуры ботов UA-спамеры, UA-сканеры Googlebot с IP-адресов, отличных от Google.
Злоупотребление черными списками IP Известные вредоносные IP-адреса IP-адреса центров обработки данных в чёрных списках

поток БИК

Request hits Cloudflare edge
    ↓
BIC evaluates HTTP headers:
  ├─ User-Agent present and valid?
  ├─ Required headers (Accept, Accept-Language) present?
  ├─ Header order consistent with browser?
  └─ IP not on abuse list?
    ↓
Pass → Request forwarded to origin
    OR
Fail → 403 Forbidden (no challenge offered)

Прохождение БИК

BIC решается путем отправки правильных заголовков, подобных браузеру. Решение CAPTCHA не требуется:

import requests

# ❌ FAILS BIC — minimal headers
response = requests.get("https://cloudflare-protected.com")
# User-Agent: python-requests/2.31.0
# Result: 403 Forbidden

# ✅ PASSES BIC — browser-like headers
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) "
                  "AppleWebKit/537.36 (KHTML, like Gecko) "
                  "Chrome/120.0.0.0 Safari/537.36",
    "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,"
              "image/avif,image/webp,*/*;q=0.8",
    "Accept-Language": "en-US,en;q=0.9",
    "Accept-Encoding": "gzip, deflate, br",
    "Connection": "keep-alive",
    "Upgrade-Insecure-Requests": "1",
    "Sec-Fetch-Dest": "document",
    "Sec-Fetch-Mode": "navigate",
    "Sec-Fetch-Site": "none",
    "Sec-Fetch-User": "?1",
}

response = requests.get("https://cloudflare-protected.com", headers=headers)
# Result: 200 OK (passed BIC)

Node.js

const axios = require("axios");

// Browser-like headers to pass BIC
const headers = {
  "User-Agent":
    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 Chrome/120.0.0.0",
  Accept:
    "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,*/*;q=0.8",
  "Accept-Language": "en-US,en;q=0.9",
  "Accept-Encoding": "gzip, deflate, br",
  Connection: "keep-alive",
  "Upgrade-Insecure-Requests": "1",
  "Sec-Fetch-Dest": "document",
  "Sec-Fetch-Mode": "navigate",
  "Sec-Fetch-Site": "none",
  "Sec-Fetch-User": "?1",
};

async function fetchWithBIC(url) {
  const response = await axios.get(url, { headers });
  console.log(`Status: ${response.status}`);
  return response.data;
}

Проблемы с капчой

Задачи CAPTCHA запускаются после прохождения BIC. Они требуют выполнения JavaScript и представляют собой решаемую задачу:

Типы задач Cloudflare CAPTCHA

Тип соревнования Курок Видно пользователю? Метод CaptchaAI
Виджет Cloudflare Turnstile Встроено на страницу разработчиком Виджет в форме turnstile
Управляемое соревнование Соответствие правилам WAF Адаптивный (невидимый/checkbox) turnstile
Испытание JavaScript Правило IUAM или WAF Страница «Проверка браузера» turnstile
Интерактивный вызов Высокое подозрение Полностраничный вызов turnstile

Последовательность задач (отличается от BIC)

Request passes BIC check
    ↓
WAF rules evaluate bot score, IP, path
    ↓
Rule triggers CAPTCHA challenge (HTTP 503)
    ↓
Browser executes JavaScript challenge
    ↓
Challenge solved → qa_validation_cookie cookie issued
    ↓
Subsequent requests pass with cookie

Отличие блоков BIC от задач CAPTCHA

Когда ваш запрос заблокирован, определение типа определяет исправление:

import requests

def diagnose_cloudflare_block(url):
    """Determine if block is BIC or CAPTCHA."""
    # Intentionally use minimal headers to trigger BIC
    minimal_response = requests.get(url, timeout=15, allow_redirects=False)

    # Use browser headers to inspect BIC in QA
    browser_headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) "
                      "AppleWebKit/537.36 Chrome/120.0.0.0",
        "Accept": "text/html,application/xhtml+xml,*/*;q=0.8",
        "Accept-Language": "en-US,en;q=0.9",
        "Accept-Encoding": "gzip, deflate, br",
    }
    browser_response = requests.get(
        url, headers=browser_headers, timeout=15, allow_redirects=False
    )

    result = {
        "minimal_headers_status": minimal_response.status_code,
        "browser_headers_status": browser_response.status_code,
    }

    if minimal_response.status_code == 403 and browser_response.status_code == 200:
        result["diagnosis"] = "BIC only — fix headers to pass"
        result["fix"] = "Add browser-like headers"

    elif minimal_response.status_code == 403 and browser_response.status_code == 403:
        result["diagnosis"] = "IP or WAF block — not just BIC"
        result["fix"] = "Change IP or check WAF rules"

    elif browser_response.status_code == 503:
        html = browser_response.text
        if "jschl" in html:
            result["diagnosis"] = "IUAM JavaScript challenge"
            result["fix"] = "Use CaptchaAI turnstile method"
        elif "cf-turnstile" in html or "challenge-platform" in html:
            result["diagnosis"] = "Managed/Turnstile challenge"
            result["fix"] = "Use CaptchaAI turnstile method"
        else:
            result["diagnosis"] = "Unknown страница Cloudflare-защиты в staging"
            result["fix"] = "Inspect page source for challenge type"

    elif browser_response.status_code == 200:
        html = browser_response.text
        if "cf-turnstile" in html:
            result["diagnosis"] = "Page loads but has Turnstile widget"
            result["fix"] = "Use CaptchaAI turnstile method for form submission"
        else:
            result["diagnosis"] = "No challenge — page accessible"
            result["fix"] = "None needed"

    return result


# Usage
diagnosis = diagnose_cloudflare_block("https://example-cf-site.com")
print(f"Diagnosis: {diagnosis['diagnosis']}")
print(f"Fix: {diagnosis['fix']}")

Распространенные сценарии

Сценарий 1: только блокировка BIC

Request with python-requests UA → 403
Request with Chrome UA → 200 ✓

Fix: Add proper browser headers. No CaptchaAI needed.

Сценарий 2: прохождение BIC, затем CAPTCHA

Request with Chrome UA → 503 (challenge page)

Fix: Headers are fine. Use CaptchaAI to solve the challenge.

Сценарий 3: BIC + CAPTCHA вместе

Request with python-requests UA → 403 (BIC block)
Request with Chrome UA → 503 (CAPTCHA challenge)

Fix: First fix headers, then solve CAPTCHA with CaptchaAI.

Сценарий 4: Ни один — блокировка IP

Request with python-requests UA → 403
Request with Chrome UA → 403

Fix: Neither BIC nor solvable challenge. IP is blocked.
Try different IP/proxy.

Рекомендации по созданию заголовков

Основные заголовки для прохождения BIC

CLOUDFLARE_SAFE_HEADERS = {
    # Mandatory
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) "
                  "AppleWebKit/537.36 (KHTML, like Gecko) "
                  "Chrome/120.0.0.0 Safari/537.36",
    "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
    "Accept-Language": "en-US,en;q=0.9",
    "Accept-Encoding": "gzip, deflate, br",

    # Strongly recommended
    "Connection": "keep-alive",
    "Upgrade-Insecure-Requests": "1",

    # Sec-Fetch headers (modern Chrome)
    "Sec-Fetch-Dest": "document",
    "Sec-Fetch-Mode": "navigate",
    "Sec-Fetch-Site": "none",
    "Sec-Fetch-User": "?1",

    # Recommended for consistency
    "Sec-Ch-Ua": '"Not_A Brand";v="8", "Chromium";v="120", "Google Chrome";v="120"',
    "Sec-Ch-Ua-Mobile": "?0",
    "Sec-Ch-Ua-Platform": '"Windows"',
}

Заголовки, вызывающие блокировку BIC

Заголовок Почему это терпит неудачу
User-Agent: python-requests/2.31.0 Известный идентификатор библиотеки HTTP
User-Agent: curl/7.81.0 Идентификатор инструмента CLI
Отсутствует заголовок Accept. Ни один браузер не пропускает Принять
Отсутствует Accept-Language Все браузеры отправляют это
User-Agent: "" (пусто) Неверно — очевидная автоматизация
User-Agent: Googlebot/2.1 с стороннего IP-адреса Поддельная личность бота

Поиск неисправностей

Симптом Причина Исправить
403 с минимальными заголовками, 200 с заголовками браузера только БИК Используйте заголовки в стиле браузера
403 со всеми комбинациями заголовков IP заблокирован или правило WAF Попробуйте другой IP или прокси
503 со страницей вызова Проверка CAPTCHA (не BIC) Используйте CaptchaAI
403 с перерывами Ограничение скорости или на основе сеанса Снижение частоты запросов, сохранение сеанса
Заголовки правильные, но все равно 403 Проверка сигналы браузера TLS (JA3) Используйте curl_cffi или настоящий браузер.

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

Могу ли я отключить BIC для своего сайта?

Да. Операторы сайта могут отключить BIC на панели управления Cloudflare в разделе «Безопасность» > «Настройки». Он включен по умолчанию во всех планах.

Проверяет ли BIC сигналы браузера TLS?

Не напрямую. BIC фокусируется на заголовках HTTP. Однако более широкий пакет управления ботами Cloudflare (корпоративный) проверяет TLS-сигналы JA3/JA4 отдельно от BIC.

Если я пройду BIC, получу ли я CAPTCHA?

Да. Задачи BIC и CAPTCHA являются независимыми уровнями. Прохождение BIC означает, что ваши заголовки выглядят законными. Вы по-прежнему можете активировать CAPTCHA из правил WAF, оценки ботов или режима IUAM.

Поможет ли CaptchaAI с BIC?

Нет, BIC не представляет собой решаемой проблемы. Исправьте заголовки HTTP для передачи BIC. CaptchaAI обрабатывает задачи CAPTCHA (Cloudflare Turnstile, задачи JavaScript, управляемые задачи), которые появляются после прохождения BIC.

Как заголовки Sec-Fetch влияют на BIC?

Современный Chrome автоматически отправляет заголовки Sec-Fetch-*. Их отсутствие не всегда запускает BIC, но их включение делает ваш профиль запроса более совместимым с реальным браузером.


Краткое содержание

Проверка целостности браузера Cloudflare блокирует запросы с явно небраузерными заголовками (403), в то время как проблемы CAPTCHA представляют собой решаемые задачи (503). BIC исправляется с помощью правильных браузерных заголовков — нетCaptchaAIнужный. Для задач CAPTCHA требуется Cloudflare Turnstile CaptchaAI или решатель страница Cloudflare-защиты в staging. Всегда сначала диагностируйте тип блока: исправьте заголовки для BIC, используйте CaptchaAI для CAPTCHA и измените IP-адреса для жестких блоков.

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

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