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:
- Reglas basadas en frecuencia que solo desafían a los clientes que envían demasiadas peticiones, para que los visitantes normales pasen.
- Listas de permitidos para tu monitorización, CI o rangos de IP de socios, de modo que tus propias pruebas no se desafíen.
- Un desafío solo en rutas sensibles, como el inicio de sesión o el pago, en lugar de en todo el sitio.
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
- En vivo hoy: PopularCaptcha, sin proxy y con tu propio proxy.
- Próximamente: AWS WAF, junto con GeeTest, reCAPTCHA v2 y v3, Cloudflare Turnstile y Arkose. No diseñes un flujo de producción que dependa de resolver AWS WAF hasta que aparezca como disponible.
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:
- Crea una regla nueva en modo count. Registra las peticiones que se desafiarían sin afectar a nadie, así puedes ver exactamente qué disparan tus pruebas.
- Activa el registro de WAF en Amazon CloudWatch Logs, Amazon S3 o Amazon Data Firehose. El registro te indica qué regla coincidió y qué cabecera o ruta la causó.
- Dale al entorno de pruebas su propio dominio de staging con un conjunto de reglas aparte, para que producción siga protegida mientras tu suite se ejecuta sin trabas.
- Incluye en la lista de permitidos solo los rangos de IP o los valores de cabecera concretos que usan tus runners de pruebas, y revisa esa lista cada vez que cambien los runners.
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:
- Lee el
robots.txtdel sitio y sus términos de servicio antes de enviar peticiones. - Mantén bajo el ritmo de peticiones. Un desafío suele ser el sitio pidiéndote que vayas más despacio.
- Detente cuando el sitio deje claro que no quiere acceso automatizado.
- No recopiles datos personales que no tienes motivo para conservar, y trata los que sí recopiles según las normas de privacidad aplicables.