Comparações

Verificação de integridade do navegador Cloudflare vs desafio CAPTCHA

A Cloudflare oferece duas defesas distintas que os desenvolvedores costumam confundir: os desafios Verificação de integridade do navegador (BIC) e CAPTCHA. BIC é uma verificação passiva no nível do cabeçalho que bloqueia obviamente o tráfego que não é do navegador sem qualquer desafio - ele simplesmente retorna um 403. Desafios CAPTCHA (Turnstile, desafios de JavaScript, desafios gerenciados) apresentam uma tarefa solucionável que navegadores legítimos podem passar. A distinção é importante porque cada um requer uma estratégia de manejo diferente.


Como eles se comparam

Recurso Verificação de integridade do navegador Desafio CAPTCHA
O que verifica Apenas cabeçalhos HTTP Comportamento do navegador + ambiente
JavaScript necessário? Não (nível do cabeçalho) Sim
O usuário vê Nada (aprovado) ou 403 (reprovado) Widget de desafio ou página JS
Status HTTP em caso de falha 403 503
Resolúvel? Não – corrija cabeçalhos ou bloqueia Sim - resolva CAPTCHA
Cookie emitido Não cookie_qa_validacao
CaptchaAI necessário? Não – corrija os cabeçalhos da solicitação Sim
Ativado por padrão Sim (todos os planos Cloudflare) Não (configurado por regra)
Aplica-se a Cada solicitação Apenas regras WAF correspondentes

Verificação de integridade do navegador (BIC)

O BIC avalia cabeçalhos de solicitação HTTP para detectar tráfego obviamente não relacionado ao navegador. Ele é executado antes de qualquer desafio JavaScript ou CAPTCHA.

O que o BIC verifica

Verifique O que procura Falhas comuns
Validação User-Agent UA ausente, vazio ou sabidamente inválido python-requests/2.31, enrolar, wget
Ordem do cabeçalho Cabeçalhos em ordem incomum Bibliotecas HTTP sem navegador
Cabeçalhos do navegador ausentes Accept, Accept-Language, Accept-Encoding ausentes Clientes HTTP mínimos
Assinaturas de bot conhecidas UAs de spam, UAs de scanner Googlebot de IPs que não são do Google
Abuso de listas negras de IP IPs maliciosos conhecidos IPs de datacenter em listas de bloqueio

Fluxo BIC

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)

Passando no BIC

O BIC é resolvido enviando cabeçalhos adequados, semelhantes aos do navegador. Nenhuma solução CAPTCHA é necessária:

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;
}

Desafios CAPTCHA

Os desafios CAPTCHA são executados após a aprovação do BIC. Eles exigem execução de JavaScript e apresentam um desafio solucionável:

Tipos de desafios CAPTCHA da Cloudflare

Tipo de desafio Gatilho Visível para o usuário? Método CaptchaAI
Widget de catraca Incorporado na página pelo desenvolvedor Widget no formulário turnstile
Desafio Gerenciado Correspondência de regras WAF Adaptativo (invisível/checkbox) turnstile
Desafio JavaScript Regra IUAM ou WAF Página "Verificando seu navegador" turnstile_staging
Desafio Interativo Alta suspeita Desafio de página inteira turnstile_staging

Fluxo do desafio (diferente do BIC)

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

Distinguindo blocos BIC de desafios CAPTCHA

Quando sua solicitação é bloqueada, a identificação do tipo determina a correção:

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 validação autorizada BIC
    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 a CaptchaAI turnstile_staging method"
        elif "cf-turnstile" in html or "challenge-platform" in html:
            result["diagnosis"] = "Managed/Turnstile challenge"
            result["fix"] = "Use a CaptchaAI turnstile method"
        else:
            result["diagnosis"] = "Unknown Cloudflare Turnstile em 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 a 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']}")

Cenários comuns

Cenário 1: somente bloco BIC

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

Fix: Add proper browser headers. No CaptchaAI needed.

Cenário 2: passagem BIC, depois CAPTCHA

Request with Chrome UA → 503 (challenge page)

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

Cenário 3: BIC + CAPTCHA juntos

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

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

Cenário 4: Nenhum dos dois – bloco de 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.

Práticas recomendadas de cabeçalho

Cabeçalhos essenciais para passar no 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"',
}

Cabeçalhos que acionam o bloqueio do BIC

Cabeçalho Por que falha
User-Agent: python-requests/2.31.0 Identificador de biblioteca HTTP conhecido
User-Agent: curl/7.81.0 Identificador da ferramenta CLI
Cabeçalho Accept ausente Nenhum navegador omite Aceitar
Faltando Accept-Language Todos os navegadores enviam isso
User-Agent: "" (vazio) Inválido – automação óbvia
User-Agent: Googlebot/2.1 de IP que não é do Google Identidade de bot falsa

Solução de problemas

Sintoma Causa Correção
403 com cabeçalhos mínimos, 200 com cabeçalhos de navegador Somente BIC Use cabeçalhos semelhantes aos do navegador
403 com todas as combinações de cabeçalho IP bloqueado ou regra WAF Experimente um IP ou proxy diferente
503 com página de desafio Desafio CAPTCHA (não BIC) Usar CaptchaAI
403 intermitentemente Limitação de taxa ou baseada em sessão Taxa de solicitação mais baixa, mantenha a sessão
Cabeçalhos corretos, mas ainda 403 Verificação de sinal de navegador TLS (JA3) Use curl_cffi ou navegador real

Perguntas frequentes

Posso desabilitar o BIC para meu site?

Sim. Os operadores do site podem desativar o BIC no painel da Cloudflare em Segurança > Configurações. Está habilitado por padrão em todos os planos.

O BIC verifica as impressões digitais do TLS?

Não diretamente. BIC se concentra em cabeçalhos HTTP. No entanto, o gerenciamento de bots (empresarial) mais amplo da Cloudflare examina as impressões digitais JA3/JA4 TLS separadamente do BIC.

Se eu passar no BIC, ainda receberei CAPTCHAs?

Sim. Os desafios BIC e CAPTCHA são camadas independentes. Passar no BIC significa que seus cabeçalhos parecem legítimos. Você ainda pode acionar um CAPTCHA a partir das regras WAF, pontuação de bot ou modo IUAM.

CaptchaAI ajuda com BIC?

Não – o BIC não apresenta um desafio solucionável. Corrija seus cabeçalhos HTTP para passar o BIC. CaptchaAI lida com desafios CAPTCHA (Turnstile, desafios JavaScript, desafios gerenciados) que aparecem após a aprovação do BIC.

Como os cabeçalhos Sec-Fetch afetam o BIC?

O Chrome moderno envia cabeçalhos Sec-Fetch-* automaticamente. A ausência deles nem sempre aciona o BIC, mas incluí-los torna seu perfil de solicitação mais consistente com um navegador real.


Resumo

A verificação de integridade do navegador da Cloudflare bloqueia solicitações com cabeçalhos obviamente não relacionados ao navegador (403), enquanto os desafios CAPTCHA apresentam tarefas solucionáveis ​​(503). O BIC é corrigido usando cabeçalhos adequados, semelhantes aos do navegador - nãoCaptchaAInecessário. Os desafios CAPTCHA requerem o Turnstile do CaptchaAI ou o solucionador Cloudflare Turnstile em staging. Sempre diagnostique primeiro o tipo de bloco: corrija cabeçalhos para BIC, use CaptchaAI para CAPTCHAs e altere IPs para blocos rígidos.

Artigos relacionados

Os comentários estão desativados para este artigo.