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.
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:
En la solicitud para resolver AWS WAF es necesario indicar los siguientes parámetros:
type - AmazonTask;
websiteURL - dirección de la página principal donde se resuelve el captcha;
challengeScript - enlace a challenge.js;
Los siguientes parámetros se toman de window.gokuProps (todos son de tipo cadena):
captchaScript - enlace a captcha.js (puede faltar si solo tiene un Challenge);
cookieSolution - por defecto false — en la respuesta recibirá "captcha_voucher" y "existing_token". Si necesita las cookies "aws-waf-token", indique true.;
userAgent - User-Agent del navegador. Envíe solo un UA actual del sistema operativo Windows;
También para esta tarea es necesario el uso de sus proxies:
proxyType :
- http - proxy HTTP/HTTPS común;
- https - pruebe esta opción si «http» no funciona (necesario para algunos proxies personalizados);
- socks4 - proxy tipo SOCKS4;
- socks5 - proxy tipo SOCKS5;
proxyAddress - Dirección IP del proxy IPv4/IPv6;
proxyPort - puerto del proxy;
proxyLogin - usuario del servidor proxy;
proxyPassword - contraseña del servidor proxy.
https://api.capmonster.cloud/createTask{
"clientKey": "API_KEY",
"task": {
"type": "AmazonTask",
"websiteURL": "https://example.com/index.html",
"websiteKey": "h15hX7brbaRTR...Za1_1",
"userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36",
"captchaScript": "https://234324vgvc23.yejk.captcha-sdk.awswaf.com/234324vgvc23/jsapi.js",
"cookieSolution": true,
"proxyType": "http",
"proxyAddress": "8.8.8.8",
"proxyPort": 8080,
"proxyLogin": "proxyLoginHere",
"proxyPassword": "proxyPasswordHere"
}
}{
"errorId":0,
"taskId":407533072
}https://api.capmonster.cloud/getTaskResult{
"clientKey":"API_KEY",
"taskId": 407533072
}{
"errorId":0,
"status":"ready",
"solution": {
"cookies": {
"aws-waf-token": "10115f5b-ebd8-45c7-851e-cfd4f6a82e3e:EAoAua1QezAhAAAA:dp7sp2rXIRcnJcmpWOC1vIu+yq/A3EbR6b6K7c67P49usNF1f1bt/Af5pNcZ7TKZlW+jIZ7QfNs8zjjqiu8C9XQq50Pmv2DxUlyFtfPZkGwk0d27Ocznk18/IOOa49Rydx+/XkGA7xoGLNaUelzNX34PlyXjoOtL0rzYBxMAQy0D1tn+Q5u97kJBjs5Mytqu9tXPIPCTSn4dfXv5llSkv9pxBEnnhwz6HEdmdJMdfur+YRW1MgCX7i3L2Y0/CNL8kd8CEhTMzwyoXekrzBM="
},
"userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36"
}
}Los datos recibidos de CapMonster Cloud (cookies válidas de AWS WAF) se pueden insertar en el contexto del navegador o cliente HTTP. Después de esto, el sitio percibe la solicitud como verificada y permite continuar trabajando sin verificaciones adicionales o páginas de challenge.
Para la automatización y pruebas es conveniente usar Puppeteer, Selenium o Playwright, ya que permiten:
- abrir la página protegida por AWS WAF;
- agregar las cookies recibidas al contexto del navegador;
- actualizar la página ya con la verificación válida;
- realizar acciones posteriores (enviar formularios, navegar por páginas, probar la funcionalidad).
Así se puede verificar la corrección del funcionamiento de la protección y asegurarse de que el sitio acepte y procese correctamente las cookies válidas de AWS WAF.
Importante: estos ejemplos de código utilizan cookieSolution=False. Si como resultado necesita obtener cookies, establezca cookieSolution=True.
// 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();
})();
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:
- Vaya a la consola de AWS
- 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.
- En el menú de la izquierda seleccione: Resources & protection packs (Web ACLs)
- 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
- Haga clic en Add resources
- Seleccione qué va a conectar:
Si su sitio está en CloudFront > seleccione CloudFront distributions
Si su backend está en ALB > seleccione Regional resourcesSi es API > seleccione API Gateway REST APIMarque 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:
- Abra WAF > seleccione su Web ACL
- Vaya a Monitoring
- Observe:
- gráficos de tráfico
- solicitudes bloqueadas
- solicitudes de muestra (sample requests)
- 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).
Captchas compatibles
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.