logo
bars

Cloudflare Turnstile
y CapMonster Cloud

Solución de CAPTCHA, instalación en el sitio web y pruebas.
¿Heredaste un sitio con una captcha u otra capa de protección pero sin acceso al código fuente? Entonces es normal preguntarse: ¿qué solución está instalada, está configurada correctamente y cómo se puede probar?

En este artículo hemos intentado responder a todas las preguntas clave. Para empezar a resolver la tarea, primero hay que determinar qué sistema de protección se está utilizando. Para ello, puedes consultar la lista de captchas y sistemas de protección antibot más populares, donde se muestran ejemplos visuales y señales clave que te ayudarán a identificar rápidamente con qué estás tratando.

Si descubres que tu sitio web utiliza Cloudflare Turnstile, el siguiente paso será analizar con más detalle sus propiedades y su funcionamiento. En este mismo artículo también puedes consultar la guía de integración de Cloudflare Turnstile para comprender por completo cómo funciona en tu sitio. Esto te permitirá no solo entender la protección actual, sino también planificar correctamente su mantenimiento.

Qué es Cloudflare Turnstile
Qué es Cloudflare Turnstile
Cloudflare Turnstile es un CAPTCHA moderno de Cloudflare que protege los sitios web de acciones automatizadas. Para los visitantes del sitio web, la verificación es casi invisible, no es necesario completar tareas: normalmente basta con un clic en la casilla de verificación, después de lo cual el sistema decide si permite el paso al visitante o lo bloquea si sospecha que es un bot. A diferencia de Cloudflare Challenge, el CAPTCHA Turnstile se coloca directamente en el sitio web, no en una ventana separada, generalmente en formularios de inicio de sesión o registro.

Cómo resolver Cloudflare Turnstile a través de CapMonster Cloud

Al probar formularios que incluyen Cloudflare Turnstile, normalmente debes verificar que la captcha funcione y esté integrada correctamente.

Puedes comprobar manualmente la captcha incrustada en tu sitio.

  • Abre la página del formulario y verifica que la captcha se renderice.
  • Intenta enviar el formulario sin resolverla: el servidor debe devolver un error.
  • Tras una solución correcta, el formulario debe enviarse sin inconvenientes.

Para la resolución automática puedes usar herramientas como CapMonster Cloud, que reciben los parámetros de la captcha, los procesan en sus servidores y devuelven un token listo para usar. Inserta ese token en el formulario para pasar la verificación sin interacción del usuario.

Trabajar con CapMonster Cloud mediante la API suele implicar los siguientes pasos:

Creación de la tareaCreación de la tarea
arrow
Enviar una solicitud APIEnviar una solicitud API
arrow
Recepción del resultadoRecepción del resultado
arrow
Colocar el token en la páginaColocar el token en la página
arrow
Reconocimiento de Cloudflare Turnstile usando bibliotecas listas
El servicio CapMonster Cloud proporciona bibliotecas listas para un trabajo cómodo en los lenguajes Python, JavaScript (Node.js) y C#.
Python
JavaScript
C#
Solución, inserción de token y envío de formulario
Ejemplo en Node.js para el ciclo completo de reconocimiento de CAPTCHA en su página web. Enfoques posibles: usar solicitudes HTTP para obtener HTML y parámetros de CAPTCHA, enviar la respuesta y procesar el resultado; o con herramientas de automatización (por ejemplo, Playwright): abrir la página, esperar el CAPTCHA, enviar parámetros (para pruebas puede enviar datos tanto correctos como incorrectos), obtener la solución a través del cliente de CapMonster Cloud, insertar el token en el formulario y ver el resultado.
// npm install playwright @zennolab_com/capmonstercloud-client

import { chromium } from "playwright";
import { CapMonsterCloudClientFactory, ClientOptions, TurnstileRequest } from "@zennolab_com/capmonstercloud-client";

async function main() {
  // 1. Resolver Turnstile a través de CapMonster Cloud
  const cmcClient = CapMonsterCloudClientFactory.Create(
    new ClientOptions({ clientKey: 'YOUR_CAPMONSTER_API_KEY' })
  );

  const turnstileRequest = new TurnstileRequest({
    websiteURL: 'http://tsmanaged.zlsupport.com',
    websiteKey: '0x4AAAAAAABUYP0XeMJF0xoy',
  });

  const result = await cmcClient.Solve(turnstileRequest);
  const token = result.solution.token;
  console.log('Token de Turnstile recibido:', token);

  // 2. Iniciar Playwright
  const browser = await chromium.launch({ headless: false });
  const context = await browser.newContext();
  const page = await context.newPage();
  await page.goto('http://tsmanaged.zlsupport.com');

  // 3. Llenar login y contraseña
  await page.fill('#username', 'your_username');
  await page.fill('#password', 'your_password');

  // 4. Esperar la aparición del campo de token oculto
  await page.waitForSelector('#token', { state: 'attached', timeout: 60000 });

  // 5. Insertar token y hacer visible el campo
  await page.evaluate((t) => {
    const tokenInput = document.querySelector('#token');
    if (tokenInput) {
      tokenInput.type = 'text';  // hacer visible el campo
      tokenInput.value = t;      // insertar token
      console.log('Token insertado en el campo token');
    } else {
      console.error('Campo #token no encontrado');
    }
  }, token);

  // 6. Verificar que el token se insertó realmente
  const checkValue = await page.$eval('#token', el => el.value);
  console.log('Verificación del valor del token:', checkValue);

  // 7. Enviar formulario
  await page.click('button[type="submit"]');
  console.log('Formulario enviado con token de Turnstile');

  // await browser.close();
}

main().catch(err => console.error(err));
Cómo conectar Cloudflare Turnstile a su sitio web
Para navegar con confianza en el funcionamiento del CAPTCHA en su sitio web, comprender la lógica de su verificación, volver a conectarlo o reconfigurarlo, le recomendamos estudiar esta sección. Describe el proceso de conexión de la protección, lo que le ayudará a comprender rápidamente todos los matices.

1. Vaya a la página de Cloudflare Turnstile, haga clic en Comenzar ahora.

2. Regístrese en el servicio.

3. En Turnstile Widgets, haga clic en el botón azul Add Widget.

HowTo Connect image 1

4. Configure Cloudflare Turnstile, especifique:

  • Widget name: nombre del CAPTCHA (para conveniencia, por ejemplo, Login form).
  • Hostname Management: dominios donde funcionará el CAPTCHA (por ejemplo, example.com).
  • Widget Mode:
    • Managed: opción óptima, el CAPTCHA decide por sí mismo si mostrar la casilla de verificación.
    • Non-interactive: la verificación se realiza automáticamente sin clics.
    • Invisible: completamente invisible.
  • Pre-clearance: establezca en Yes si el sitio está a través de Cloudflare Proxy (para evitar repetir el CAPTCHA).

5. Después de crear el widget, recibirá dos claves: Site Key y Secret Key.

HowTo Connect image 2

6. Conectar la parte del cliente

1) Conectar el script de Turnstile

Renderizado automático (el widget se crea automáticamente cuando se carga la página):

<script src="https://challenges.cloudflare.com/turnstile/v0/api.js" async defer></script>

Control programático (usted mismo crea el widget a través de JavaScript):

<script src="https://challenges.cloudflare.com/turnstile/v0/api.js?render=explicit" defer></script>

Importante: el script debe cargarse desde la URL exacta. El proxy o caché pueden causar fallos.

2) Crear un contenedor para el widget

Automático:

<div class="cf-turnstile" data-sitekey="<YOUR_SITEKEY>"></div>

Programáticamente:

<div id="turnstile-container"></div>

3) Configuración del widget

A través de atributos data:

<div class="cf-turnstile"
            data-sitekey="<YOUR_SITEKEY>"
            data-theme="light"
            data-size="normal"
            data-callback="onSuccess">
          </div>

A través de JavaScript:

const widgetId = turnstile.render("#turnstile-container", {
  sitekey: "<YOUR_SITEKEY>",
  theme: "light",
  size: "normal",
  callback: token => console.log("Token:", token)
});

4) Trabajar con tokens

const token = turnstile.getResponse(widgetId);      // obtener token
const isExpired = turnstile.isExpired(widgetId);    // verificar caducidad
turnstile.reset(widgetId);                          // restablecer
turnstile.remove(widgetId);                         // eliminar
turnstile.execute("#turnstile-container");         // ejecución manual

5) Integración con formulario

<form id="my-form" method="POST">
  <input type="hidden" name="cf-turnstile-response" id="cf-turnstile-response">
  <button type="submit">Enviar</button>
</form>

<script>
function onSuccess(token) {
  document.getElementById("cf-turnstile-response").value = token;
}
</script>

Ejemplo de códigoEjemplo de código
arrow

6) Configurar la parte del servidor

Proceso de verificación del servidor:

  • Cliente: el usuario completa Turnstile en la página → se crea el token.
  • Se envía el formulario: el token junto con los datos del formulario se envía al servidor.
  • Servidor: realiza una solicitud POST a la API Siteverify de Cloudflare con el token y el secreto.
  • Cloudflare: devuelve JSON con el resultado (success: true/false) e información adicional (action, hostname, tiempo de finalización).
  • Servidor: decide si permite o rechaza la acción del usuario.

API de Siteverify:

POST
https://challenges.cloudflare.com/turnstile/v0/siteverify

Parámetros de solicitud:

  • secret (obligatorio): clave secreta de Turnstile del panel de Cloudflare
  • response (obligatorio): token recibido en el cliente
  • remoteip (opcional): dirección IP del usuario (recomendado)
  • idempotency_key (opcional): UUID único para protección contra verificaciones repetidas

Propiedades del token:

  • Longitud máxima: 2048 caracteres
  • Válido durante 5 minutos
  • De un solo uso
  • Cuando caduca o se vuelve a verificar, la API devolverá el error timeout-or-duplicate

Ejemplo de verificación en PHPEjemplo de verificación en PHP
arrow

Background
Posibles errores y depuración
Bug Icon
Parámetros incorrectos
El CAPTCHA no se muestra o devuelve errores como invalid-input-secret, missing-input-response, invalid-input-response. Verifique la validez de sitekey y secret key, así como la configuración en el Panel de Cloudflare.
Bug Icon
Tiempo de espera de solución agotado
El token ha caducado (válido durante 300 segundos) o no se recibió a tiempo. Asegure una conexión estable y una integración API correcta.
Bug Icon
Token vacío o incorrecto
El parámetro cf-turnstile-response falta o es incorrecto. Verifique la transferencia del token al formulario y al servidor.
Bug Icon
Respuesta success=false
El token es inválido, caducado o ya usado. Cada token solo puede verificarse una vez. Active el registro de solicitudes y respuestas de Siteverify para análisis.
Pruebas de resistencia de la protección
Después de la integración, asegúrate de que el sistema realmente proteja el sitio contra acciones automatizadas.
Consejos de seguridad y optimización
Verifique los tokens solo en el servidor, nunca llame a la API Siteverify desde el frontend: esto expondrá su clave secreta.
Use variables de entorno o un sistema de gestión de secretos en lugar de almacenar claves en el código.
Verifique campos adicionales (<b>hostname</b>, <b>action</b>) para asegurarse de que la solicitud provino de su sitio web.
Use HTTPS: todas las llamadas a Siteverify deben realizarse a través de una conexión segura.
Implemente manejo de errores: cuando la API no esté disponible, muestre al usuario un mensaje claro sin revelar datos internos.
Restrinja el uso de sitekey por dominios.
Agregue enlaces a la <b>Política de privacidad</b> y los <b>Términos de servicio de Cloudflare</b> al formulario si su organización o política de privacidad lo requiere.
Conclusión

Si has heredado un sitio web que ya tiene un captcha u otro sistema de protección instalado y no tienes acceso al código, no pasa nada. Identificar qué tecnología se está utilizando es bastante sencillo. Para comprobar que todo funciona correctamente, puedes usar el servicio de reconocimiento CapMonster Cloud en un entorno de pruebas aislado, para asegurarte de que el mecanismo de procesamiento de tokens y la lógica de verificación funcionan correctamente.

En el caso de Cloudflare Turnstile, basta con detectar el sistema, analizar su comportamiento y confirmar que la protección funciona correctamente. En el artículo hemos mostrado cómo identificar Cloudflare Turnstile y dónde encontrar las instrucciones para su integración o reconfiguración, de modo que puedas mantener la protección con confianza y controlar su funcionamiento.

Conclusion