Scarnox · Blog

Captcha de AWS WAF explicado y cómo gestionarlo

El captcha de AWS WAF es un desafío que sirve el Web Application Firewall de Amazon cuando el titular de un sitio lo ha configurado para verificar a los visitantes. Una petición que el firewall considera sospechosa recibe una página de desafío en lugar del contenido. El visitante debe superar entonces una comprobación antes de que se cargue la página real. Si te encuentras con él mientras pruebas o recopilas datos, necesitas saber cómo reconocerlo, qué controla el titular del sitio y qué puede hacer Scarnox hoy. Esta guía cubre las tres cosas.

Qué es el captcha de AWS WAF

AWS WAF es un motor de reglas que se sitúa delante de una aplicación web, en Amazon CloudFront, un Application Load Balancer o una API Gateway. Las reglas pueden permitir, bloquear, contar o desafiar una petición. Un desafío puede ser una comprobación silenciosa en JavaScript o un puzzle de captcha visible, según cómo esté configurada la regla.

El punto importante es que la decisión la toma el titular del sitio. El firewall no conoce el propósito de tu scraper. Solo puntúa el tráfico que ve: la frecuencia de peticiones, la reputación de la IP, las cabeceras y el comportamiento del cliente.

Cómo reconocerlo en el código

Los desafíos de AWS WAF suelen identificarse por sus respuestas. Una señal habitual es la cabecera de respuesta x-amzn-waf-action, y un desafío suele servirse con el código HTTP 202 antes de que aparezca la página real. Trátalas como indicios, no como prueba, porque los sitios configuran el firewall de formas distintas:

import requests

def looks_like_aws_waf(resp: requests.Response) -> bool:
    # Una señal en la cabecera, no una prueba. Confírmalo con la página que estás probando.
    return "x-amzn-waf-action" in resp.headers

resp = requests.get("https://example.com/products", timeout=30)
if looks_like_aws_waf(resp):
    print("Challenge served. Stop, slow down, and check your request rate.")
else:
    print("Status", resp.status_code)

Busca también un script cargado desde una ruta de desafío de AWS WAF en el código fuente de la página, y una página que no muestra contenido hasta que se ejecuta un script. Una llamada normal con requests a menudo recibirá la página de desafío en lugar de los datos. Es lo esperado.

Qué puede hacer el titular del sitio

Si administras el sitio, la consola de AWS WAF te permite ajustar las reglas que activan un desafío. Las opciones más útiles son:

Si eres tú quien prueba tu propio sitio, la solución más limpia es una lista de permitidos para tus runners de pruebas. No intentes vencer el desafío en un sitio que no controlas. Esa es la protección del titular, y es lo primero que romperá tu acceso.

Estado del soporte en Scarnox

Así que si un sitio con el que tienes permiso para trabajar muestra hoy un desafío de AWS WAF, las opciones son las de arriba: ir más despacio, usar una lista de permitidos si el sitio es tuyo, o pedir al titular una API o un feed de datos. Puedes crear una cuenta y empezar con crédito de prueba gratis, sin tarjeta, para configurar tu flujo de PopularCaptcha ahora y estar preparado cuando el soporte de AWS WAF esté disponible. Los precios actuales están en la página de precios.

Prueba tu propio sitio detrás de AWS WAF

Si eres el titular del sitio y quieres que tus pruebas automatizadas superen el firewall sin debilitarlo para los visitantes reales, usa las herramientas propias del firewall en lugar de rodear el desafío:

Estos pasos mantienen la protección en su sitio y hacen que el tráfico de pruebas sea predecible, que es el resultado que realmente necesitas. Revisa las reglas después de cada cambio en tu configuración de pruebas, porque una regla que era correcta para los runners del mes pasado puede bloquearlos ahora.

Scrapea de forma responsable

Si tu motivo para llegar a una página de AWS WAF es recopilar datos:

Próximos pasos