Amazon AWS WAF
y CapMonster Cloud

Resolución de captchas, instalación en el sitio y pruebas.

Precios de la solución Amazon AWS WAF

CAPTCHA
Precio (USD)
$ 1.40
1000 tokens
¿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 Amazon AWS WAF, 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 Amazon AWS WAF 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 AWS WAF de Amazon?
¿Qué es AWS WAF de Amazon?

AWS WAF (Amazon Web Services Web Application Firewall) es un firewall de aplicaciones web en la nube de Amazon que protege sitios, APIs y aplicaciones web contra ataques y tráfico malicioso. En pocas palabras, es un filtro que se coloca delante de su sitio o API y decide qué tráfico de visitantes dejar pasar y cuál bloquear.

Si el sitio tiene activado Challenge/CAPTCHA, el visitante puede ver una página separada de verificación. Se le pedirá que complete una tarea, por ejemplo, seleccionar todas las imágenes de una categoría, para confirmar que no es un bot.

Cómo resolver AWS WAF a través de CapMonster Cloud

Al probar recursos protegidos por AWS WAF, es importante asegurarse de que la protección funcione correctamente y esté integrada adecuadamente.

Puede verificar manualmente el funcionamiento de la protección:

  • Abra la página con el formulario o recurso y asegúrese de que AWS WAF responda correctamente a las solicitudes.
  • Intente realizar acciones que puedan estar restringidas por el WAF (por ejemplo, solicitudes masivas, encabezados sospechosos); el servidor debería bloquear dichas solicitudes o devolver un error.

Después de pasar la verificación con éxito, AWS WAF establece cookies que confirman que el usuario o cliente ha pasado la verificación y se permite el tráfico de confianza.

Para el reconocimiento automático de captchas se pueden utilizar servicios especializados, por ejemplo, CapMonster Cloud, una herramienta que acepta los parámetros del captcha, los procesa en sus servidores y devuelve cookies o un token listos para usar. Estos se pueden insertar en el navegador para pasar la verificación sin la participació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
Sustitución de cookies aws-waf-token en la páginaSustitución de cookies aws-waf-token en la página
arrow
Reconocimiento de Amazon AWS WAF utilizando bibliotecas listas para usar
El servicio CapMonster Cloud proporciona bibliotecas listas para un trabajo conveniente en los lenguajes Python, JavaScript (Node.js) y C#.

Importante: estos ejemplos de código utilizan cookieSolution=False. Si como resultado necesita obtener cookies, establezca cookieSolution=True.

Python
JavaScript
C#
Solución, obtención de parámetros y establecimiento de cookies
Ejemplo en Node.js para el ciclo completo de reconocimiento de captcha en su página web. Enfoques posibles: usar solicitudes HTTP para obtener el HTML y los parámetros del sistema de protección, enviar la respuesta y procesar el resultado. O mediante herramientas de automatización (por ejemplo, Playwright): abrir la página, esperar la verificación, enviar los parámetros a través del cliente CapMonster Cloud, obtener el resultado, insertar las cookies en el navegador (para pruebas puede usar tanto datos correctos como incorrectos) y ver el resultado.
// npm install playwright @zennolab_com/capmonstercloud-client
// npx playwright install chromium

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

const API_KEY = "YOUR_API_KEY";
const CAPTCHA_URL = "https://example.com";

// Configuración del proxy
const PROXY = {
    proxyType: "http",
    proxyAddress: "PROXY_HOST",
    proxyPort: 1234,
    proxyLogin: "PROXY_USER",
    proxyPassword: "PROXY_PASS"
};

(async () => {
    // 1) Abrimos la página a través del proxy y recopilamos los parámetros de AWS WAF
    const browser = await chromium.launch({
        headless: false,
        proxy: {
            server: `http://${PROXY.proxyAddress}:${PROXY.proxyPort}`,
            username: PROXY.proxyLogin,
            password: PROXY.proxyPassword
        }
    });

    const page = await browser.newPage();
    await page.goto(CAPTCHA_URL, { waitUntil: "networkidle" });

    // esperamos la carga de los scripts de challenge y captcha
    await page.waitForFunction(() => {
        const scripts = Array.from(document.querySelectorAll("script")).map(s => s.src || "");
        return scripts.some(src => src.includes("challenge")) && scripts.some(src => src.includes("captcha"));
    });

    // extraemos los parámetros de AWS WAF (clave, context, iv, enlaces a scripts)
    const params = await page.evaluate(() => {
        const gokuProps = window.gokuProps || {};
        const scripts = Array.from(document.querySelectorAll("script")).map(s => s.src || "");
        return {
            websiteKey: gokuProps.key || null,
            context: gokuProps.context || null,
            iv: gokuProps.iv || null,
            challengeScript: scripts.find(src => src.includes("challenge")),
            captchaScript: scripts.find(src => src.includes("captcha"))
        };
    });

    await browser.close();

    // 2) Resolvemos AWS WAF a través de CapMonster Cloud
    const client = CapMonsterCloudClientFactory.Create(new ClientOptions({ clientKey: API_KEY }));

    const req = new AmazonRequest({
        websiteURL: CAPTCHA_URL,
        websiteKey: params.websiteKey,
        challengeScript: params.challengeScript,
        captchaScript: params.captchaScript,
        context: params.context,
        iv: params.iv,
        cookieSolution: true,
        proxy: PROXY
    });

    const solved = await client.Solve(req);
    const wafToken = solved.solution.cookies["aws-waf-token"];

    // 3) Insertamos aws-waf-token y limpiamos los antiguos
    const browser2 = await chromium.launch({
        headless: false,
        proxy: {
            server: `http://${PROXY.proxyAddress}:${PROXY.proxyPort}`,
            username: PROXY.proxyLogin,
            password: PROXY.proxyPassword
        }
    });

    const context2 = await browser2.newContext();

    // limpieza de aws-waf-token antiguos para su dominio
    const existingCookies = await context2.cookies();
    const filteredCookies = existingCookies.filter(c => !(c.name === "aws-waf-token" && c.domain.endsWith(".your-domain")));
    await context2.clearCookies();
    await context2.addCookies(filteredCookies);

    // establecimiento del nuevo aws-waf-token
    await context2.addCookies([{
        name: "aws-waf-token",
        value: wafToken,
        domain: ".your-domain",
        path: "/",
        httpOnly: false,
        secure: true
    }]);

    const page2 = await context2.newPage();
    const response = await page2.goto(CAPTCHA_URL, { waitUntil: "networkidle" });

    console.log("Final page status:", response.status());
    console.log("Final page URL:", page2.url());

    await browser2.close();
})();
Cómo conectar AWS WAF a su sitio
Para orientarse con confianza en el funcionamiento del captcha en su sitio, comprender la lógica de su verificación, volver a conectarlo o reconfigurarlo, le recomendamos estudiar esta sección. En ella se describe el proceso de conexión de la protección, lo que le ayudará a entender rápidamente todos los matices.

AWS WAF no se puede instalar directamente en un sitio. Funciona solo a través de recursos de AWS:

  • Amazon CloudFront (la opción principal y mejor) — CDN a través de la cual se puede proteger cualquier sitio. Funciona rápido, globalmente y es adecuada para casi todos los casos.
  • Application Load Balancer (ALB) — se utiliza para sitios del lado del servidor, APIs y contenedores dentro de AWS. Si su backend funciona en EC2, ECS, EKS, coloque el WAF en el ALB.
  • API Gateway — protección de API REST y WebSocket. Adecuado para SPA, aplicaciones móviles y microservicios.
  • AWS AppSync (API GraphQL)
  • Amazon Cognito (inicio de sesión/registro)
  • AWS App Runner (aplicaciones en contenedores)
  • AWS Amplify Hosting (alojamiento frontend)
  • AWS Verified Access (acceso a aplicaciones internas)

Paso 1. Cree una cuenta de AWS (si no la tiene)

Vaya a: https://portal.aws.amazon.com/billing/signup. Cree la cuenta > confirme email y teléfono.

Paso 2. Puede usar la interfaz estándar o la nueva interfaz de AWS WAF:

  1. Vaya a la consola de AWS
  2. Abra AWS WAF. En el menú de la izquierda haga clic en Try the new experience (si se le ofrece).

Paso 3. Cree un paquete de protección (Web ACL)

Este es el conjunto de reglas de protección para su recurso.

  1. En el menú de la izquierda seleccione: Resources & protection packs (Web ACLs)
  2. Haga clic en Add protection pack (web ACL).

Paso 4. Configure la categoría de la aplicación:

En el bloque Tell us about your app:

  • App category — seleccione Web / API / Both
  • Traffic source — de dónde proviene el tráfico (web, API o ambos)

Estos parámetros son necesarios para que AWS ofrezca reglas óptimas.

Paso 5. Seleccione los recursos que serán protegidos

  1. Haga clic en Add resources
  2. Seleccione qué va a conectar:

Si su sitio está en CloudFront > seleccione CloudFront distributions
Si su backend está en ALB > seleccione Regional resources
Si es API > seleccione API Gateway REST API
Marque la casilla en el recurso necesario > haga clic en Add.

Paso 6. Seleccione un conjunto de reglas inicial.

AWS ofrecerá:

Recommended for you — la mejor opción para principiantes

Incluye:

  • protección básica
  • reglas contra SQLi y XSS
  • IP reputation lists (listas de reputación de IP)
  • Bot Control (opcional)
  • reglas para web/API

Haga clic en Next.

Paso 7. Configuración (opcional)

En la pantalla Customize protection pack (web ACL):

Parámetros principales:

  • Default action:
    • Allow all except blocked — generalmente se elige esto
    • Block all except allowed — si el sitio es cerrado
  • Default rate limits: Límite de cantidad de solicitudes (mitigación DDoS L7)
  • IP addresses: Listas blancas/negras
  • Country specific origins: Restricción de tráfico por países

Registro (Logging)

Elija dónde guardar los logs:

  • CloudWatch
  • S3
  • Firehose

(se recomienda S3 + Athena).

Paso 8. Crear Web ACL

Haga clic en: Add protection pack (web ACL)

AWS creará las reglas y las vinculará a su recurso.

Verificación

Para asegurarse de que la protección funciona:

  1. Abra WAF > seleccione su Web ACL
  2. Vaya a Monitoring
  3. Observe:
    • gráficos de tráfico
    • solicitudes bloqueadas
    • solicitudes de muestra (sample requests)

Adicional (opcional)

  • Activar CAPTCHA o Challenge

    En cualquier regla > Action > CAPTCHA / Challenge

    Esto reduce el tráfico de bots y protege las páginas de inicio de sesión y formularios.

  • Agregar Managed Rule Groups

    En la sección Rule groups puede agregar:

    • AWS Managed
    • Bot Control
    • Account takeover prevention
    • Marketplace rules (F5, Imperva, Fortinet)
  • Vincular con Shield Advanced. Para protección contra DDoS (L3–L7).

Background
Posibles errores y depuración
Bug Icon
Dominio o regla inválidos — El Challenge no se muestra
Verifique que el AWS WAF WebACL esté vinculado al dominio correcto (CloudFront Distribution / ALB / API Gateway), ruta correcta y que no haya conflictos entre reglas.
Bug Icon
Tiempo de espera agotado al cargar la página o verificar
A veces el navegador o el script no espera la respuesta de AWS WAF. Aumente los tiempos de espera (timeouts) en las pruebas y asegúrese de que el backend procese las solicitudes sin retrasos.
Bug Icon
Cookies de AWS WAF caducadas
Los _aws_waf_token_… obsoletos o las etiquetas de cookies relacionadas provocan un Challenge repetido o un bloqueo temporal.
Bug Icon
Reglas excesivamente sensibles
Las firmas de Bot Control demasiado estrictas, reglas CAPTCHA o reglas basadas en tasa (Rate-based) pueden bloquear a usuarios reales.
Bug Icon
Configuración incorrecta de WebACL
Errores en el orden de las reglas, prioridades o condiciones pueden provocar falsos positivos y bloqueos.
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
Configure la WebACL según el nivel de riesgo. Use Managed Rules (AWS, AWS Marketplace), AWS Bot Control y reglas personalizadas basadas en reputación de IP, encabezados, límite de tasa y otras condiciones.
Registre los eventos de WAF. Active <a href="https://docs.aws.amazon.com/waf/latest/developerguide/logging.html" target="_blank">AWS WAF Logging (Kinesis Firehose / S3 / CloudWatch Logs)</a> para el análisis de falsos positivos y optimización de reglas.
Agregue enlaces a la <span class="font-bold">Política de privacidad</span> y <span class="font-bold">Términos de uso</span>. Esto es importante para la transparencia y el cumplimiento de los requisitos de seguridad y las expectativas del usuario.
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 Amazon AWS WAF, 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 Amazon AWS WAF 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
Enlaces útiles
DocIconDocumentación de AWS WAFDocIconDocumentación de CapMonster Cloud (trabajo con AWS WAF)DocIconDescripción general de la protección de recursos web con AWS WAF

Preguntas frecuentes sobre Amazon AWS WAF

Los valores websiteKey, context e iv provienen de la página de challenge de AWS WAF y pueden extraerse del HTML de esa página o mediante JavaScript desde window.gokuProps.key, window.gokuProps.context y window.gokuProps.iv. Puede extraerlos automáticamente con nuestros scripts listos para usar.

Son parámetros relacionados con la sesión de la página de challenge actual, no valores estáticos genéricos para reutilizar entre intentos.

El campo booleano cookieSolution controla el formato de la solución de AWS WAF devuelta por CapMonster Cloud:

  • false — la respuesta contiene captcha_voucher y existing_token
  • true — la solución incluye cookies con el aws-waf-token listo para usar

Para flujos de automatización del navegador como Playwright, Puppeteer y Selenium, cookieSolution: true suele ser la opción más conveniente, ya que devuelve cookies listas para usar que pueden añadirse directamente a la sesión del navegador.

Por defecto, no necesita proporcionar sus propios proxies para tareas de AWS WAF, ya que CapMonster Cloud utiliza proxies integrados y su coste ya está incluido en el servicio.

Sin embargo, debe especificar sus propios proxies cuando el sitio web de destino no acepta el token o cuando el acceso a los servicios integrados está restringido. Si utiliza un proxy con autorización por IP, asegúrese de incluir en la lista blanca la dirección 65.21.190.34.

Un token válido de AWS WAF no omite automáticamente el resto de la lógica de Web ACL. AWS indica que cuando una solicitud tiene un token válido para una regla CAPTCHA o Challenge, esa regla se gestiona de forma similar a la acción Count y AWS WAF continúa evaluando la solicitud contra las reglas restantes de la Web ACL. Eso significa que Bot Control, rate-based rules y otras reglas aún pueden afectar al tráfico automatizado, y AWS documenta por separado escenarios de falsos positivos para Bot Control.

En la práctica, la resolución de problemas debe centrarse en el orden de las reglas, la prioridad, la configuración del token y posibles falsos positivos, en lugar de asumir que una CAPTCHA resuelta garantiza por sí sola el paso.

Los challenges repetidos de AWS WAF suelen ocurrir cuando el token ha expirado, la cookie aws-waf-token falta o está desactualizada, ha terminado el tiempo de inmunidad de la sesión o no está configurado el intercambio de tokens para flujos multidominio.

Para desarrolladores de sitios web: Configure el tiempo de inmunidad de CAPTCHA o Challenge según el comportamiento real del usuario, configure una lista de dominios de token para dominios relacionados, verifique que la integración JavaScript de AWS WAF almacena el token correctamente y asegúrese de que reglas Web ACL más estrictas no sigan bloqueando tráfico legítimo tras resolver la CAPTCHA.

Para usuarios de CapMonster Cloud: Use datos de tarea frescos de la página de destino, pase el resultado en el formato requerido mediante la cookie aws-waf-token o la cabecera x-aws-waf-token, y cree una nueva tarea con parámetros actualizados en lugar de reutilizar una solución antigua si los challenges continúan.