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.
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:
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 :
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/142.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/142.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:
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:
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:
Paso 3. Cree un paquete de protección (Web ACL)
Este es el conjunto de reglas de protección para su recurso.
Paso 4. Configure la categoría de la aplicación:
En el bloque Tell us about your app:
Estos parámetros son necesarios para que AWS ofrezca reglas óptimas.
Paso 5. Seleccione los recursos que serán protegidos
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:Haga clic en Next.
Paso 7. Configuración (opcional)
En la pantalla Customize protection pack (web ACL):
Parámetros principales:
Registro (Logging)
Elija dónde guardar los logs:
(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:
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.
En la sección Rule groups puede agregar:
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.