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-адреса для жестких блоков.
Похожие статьи
- страница Cloudflare-защиты в staging против обнаружения Cloudflare Turnstile
- Сравнение Geetest и Cloudflare Turnstile
- Управляемое Cloudflare против интерактивного испытания