Explicaciones Técnicas

Cómo funciona Cloudflare Challenge

Cuando Cloudflare sospecha que un visitante es un bot, muestra un intersticial de página completa con el mensaje "Comprueba tu navegador antes de acceder..." o "Verifica que eres humano". Esto se llama Cloudflare Challenge y no debe confundirse con Turnstile, que es un widget integrado en una página.

El desafío bloquea el acceso a toda la página hasta que el navegador pase la verificación. Una vez aprobada, Cloudflare establece una cookie qa_validation_cookie que otorga acceso a solicitudes posteriores.


Cómo funciona el flujo de desafíos

Request → Cloudflare proxy → Suspicious? → Challenge page
                                              ↓
                                    Browser verification
                                              ↓
                                    qa_validation_cookie cookie set
                                              ↓
                                    Original page loads
  1. Solicitud interceptada: el proxy inverso de Cloudflare evalúa la solicitud entrante
  2. Evaluación de riesgos: se analizan la reputación de IP, los encabezados de solicitud, la señales del navegador TLS y el comportamiento.
  3. Desafío servido: si es sospechoso, una página de desafío reemplaza la respuesta prevista.
  4. Verificación del navegador: los desafíos de JavaScript se ejecutan en el navegador
  5. Configuración de cookies: si se realiza correctamente, la cookie qa_validation_cookie se configura con un TTL configurable.
  6. Acceso concedido: el navegador recarga y recibe el contenido de la página original.

¿Qué desencadena un Cloudflare Challenge?

gatillo Descripción
IP del centro de datos Solicitud de proveedores de hosting conocidos
encabezados faltantes Encabezados HTTP faltantes o inusuales
señales del navegador TLS La señales del navegador JA3/JA4 coincide con firmas de bot conocidas
Alta tasa de solicitudes Demasiadas solicitudes de la misma IP
Configuración del nivel de seguridad El propietario del sitio establece un umbral de desafío alto
Reglas basadas en países Reglas de desafío o bloqueo geográfico
Puntuación del robot La puntuación del bot ML de Cloudflare es demasiado baja
Amenaza conocida La IP aparece en las listas de inteligencia sobre amenazas

Después de superar el desafío, el navegador recibe:

qa_validation_cookie=abc123...; path=/; domain=.example.com; secure; HttpOnly; SameSite=None

Propiedades clave:

  • Duración: 15 minutos a 24 horas (configurable por el propietario del sitio)
  • Alcance: Vinculado al dominio específico
  • Vinculante: Vinculado al agente de usuario y la dirección IP utilizada durante la verificación
  • Uso: Debe incluirse en todas las solicitudes posteriores para evitar una nueva impugnación.

Importante: La cookie qa_validation_cookie está vinculada al Agente de usuario y a la dirección IP específicos utilizados durante la verificación. Cambiar cualquiera de ellos invalidará la cookie.


Cloudflare Challenge vs Torniquete vs JS Challenge

Característica Desafío FQ torniquete Desafío JS
Tipo Intersticial de página completa Widget en la página cheque silencioso
El usuario ve Página "Comprobando tu navegador" Casilla de verificación o nada nada
Bloquea el acceso a la página si No Brevemente
Establece qa_validation_cookie si A veces si
Requiere proxy para resolver si No N/A
El sitio utiliza Cloudflare CDN Requerido Opcional Requerido

Resolviendo Cloudflare Challenge con CaptchaAI

La resolución de Cloudflare Challenge requiere un proxy porque la cookie qa_validation_cookie está vinculada a la dirección IP.

pitón

import requests
import time

API_KEY = "YOUR_API_KEY"

# Submit task — proxy is REQUIRED
response = requests.get("https://ocr.captchaai.com/in.php", params={
    "key": API_KEY,
    "method": "cloudflare_challenge",
    "pageurl": "https://example.com/protected-page",
    "proxy": "username:password@proxy.example.com:8080",
    "proxytype": "HTTP",
    "json": 1
})

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

# Poll for result
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:
        solution = result["request"]
        # solution contains qa_validation_cookie cookie + user_agent
        print(f"qa_validation_cookie: {solution}")
        break

Nodo.js

const axios = require('axios');

async function solveCloudflareChallenge(pageurl, proxy) {
  const { data } = await axios.get('https://ocr.captchaai.com/in.php', {
    params: {
      key: 'YOUR_API_KEY',
      method: 'cloudflare_challenge',
      pageurl,
      proxy,
      proxytype: 'HTTP',
      json: 1
    }
  });

  const taskId = data.request;

  for (let i = 0; i < 60; i++) {
    await new Promise(r => setTimeout(r, 5000));
    const res = await axios.get('https://ocr.captchaai.com/res.php', {
      params: { key: 'YOUR_API_KEY', action: 'get', id: taskId, json: 1 }
    });
    if (res.data.status === 1) return res.data.request;
  }
  throw new Error('Timeout');
}
# After getting the solution
qa_validation_cookie = solution["qa_validation_cookie"]
user_agent = solution["user_agent"]

# Use the SAME proxy and user agent for subsequent requests
session = requests.Session()
session.cookies.set("qa_validation_cookie", qa_validation_cookie, domain=".example.com")
session.headers["User-Agent"] = user_agent
session.proxies = {"https": "http://username:password@proxy.example.com:8080"}

# Now access the protected page
page = session.get("https://example.com/protected-page")
print(f"Status: {page.status_code}")

Por qué se requiere proxy

La cookie qa_validation_cookie está criptográficamente vinculada a:

  1. Dirección IP — La resolución debe realizarse desde la misma IP que usarás
  2. Agente de usuario: el agente de usuario de resolución debe coincidir con sus solicitudes
  3. señales del navegador TLS: algunas configuraciones también verifican las características de TLS

Si alguno de estos difiere entre la solución y sus solicitudes posteriores, la cookie no es válida.


Preguntas frecuentes

Los propietarios del sitio configuran la duración, normalmente de 15 minutos a 24 horas. Después del vencimiento, se debe resolver un nuevo desafío.

No. La cookie está vinculada a la IP utilizada durante la verificación. Cambiar las IP requiere una nueva solución.

¿Cuál es la diferencia entre Cloudflare Challenge y Turnstile?

Cloudflare Challenge es un intersticial de página completa que bloquea el acceso a la página. Turnstile es un widget integrado en la página, similar a reCAPTCHA. El desafío requiere que el sitio utilice Cloudflare como proxy; El torniquete se puede utilizar en cualquier sitio.

¿Cuánto tiempo lleva resolverlo?

La resolución de Cloudflare Challenge tarda entre 20 y 60 segundos, más que Turnstile o reCAPTCHA debido a la verificación completa del navegador.

¿Qué pasa si la página tiene Cloudflare y reCAPTCHA?

Resuelva primero el Cloudflare Challenge para acceder a la página, luego resuelva el reCAPTCHA en la página cargada.


Guías relacionadas

Los comentarios están deshabilitados para este artículo.