В этой статье мы постарались дать ответы на все вопросы. А начать решение задачи нужно с определения того, какая система защиты используется. Для этого можно обратиться к списку популярных капч и систем антибот-защиты, где представлены визуальные примеры и ключевые признаки, которые могут помочь быстро определить, с чем вы имеете дело.
Если вы обнаружили, что на вашем сайте используется Amazon AWS WAF, следующим шагом станет более подробное изучение её свойств и самой работы. Также в этой статье вы можете изучить инструкцию по подключению системы Amazon AWS WAF, чтобы полностью разобраться, как она функционирует на вашем сайте. Это позволит не только понимать текущую защиту, но и грамотно планировать её поддержку.
AWS WAF (Amazon Web Services Web Application Firewall) — это облачный веб-фаервол от Amazon, который защищает сайты, API и веб-приложения от атак и вредного трафика. Проще говоря, это фильтр, который стоит перед вашим сайтом или API и решает, какой трафик посетителей пропускать, а какой блокировать.
Если на сайте включён Challenge/CAPTCHA, посетитель может увидеть отдельную страницу с проверкой. Ему будет предложено выполнить задание, например, выбрать все изображения из одной категории, чтобы подтвердить, что он не бот.
При тестировании ресурсов, защищённых AWS WAF, важно убедиться, что защита работает корректно и интегрирована правильно.
Вы можете вручную проверить работу защиты:
После успешного прохождения проверки AWS WAF устанавливает cookies, которые подтверждают, что пользователь или клиент прошёл проверку и доверенный трафик разрешён.
Для автоматического распознавания капчи можно использовать специализированные сервисы, например, CapMonster Cloud — инструмент, который принимает параметры капчи, обрабатывает их на своих серверах и возвращает готовые куки или токен. Их можно подставить в браузер, чтобы пройти проверку без участия пользователя.
Работа с CapMonster Cloud через API обычно включает следующие шаги:
В запросе для решения AWS WAF необходимо указать следующие параметры:
type - AmazonTask;
websiteURL - адрес основной страницы, на которой решается капча;
challengeScript - ссылка на challenge.js;
Следующие параметры берутся из window.gokuProps (все имеют строковый тип):
captchaScript - ссылка на captcha.js (может отсутствовать, если у вас просто Challenge);
cookieSolution - по умолчанию false — в ответ вы получите "captcha_voucher" и "existing_token". Если вам требуются куки "aws-waf-token", то укажите значение true.;
userAgent - User-Agent браузера. Передавайте только актуальный UA от ОС Windows;
Также для этой задачи необходимо использование ваших прокси:
proxyType :
proxyAddress - IP адрес прокси IPv4/IPv6;
proxyPort - порт прокси;
proxyLogin - логин прокси-сервера;
proxyPassword - пароль прокси-сервера.
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"
}
}Полученные от CapMonster Cloud данные (валидные cookies AWS WAF) можно подставить в браузерный контекст или HTTP-клиент. После этого сайт воспринимает запрос как прошедший проверку и позволяет продолжить работу без дополнительных проверок или challenge-страниц.
Для автоматизации и тестирования удобно использовать Puppeteer, Selenium или Playwright — они позволяют:
Так можно проверить корректность работы защиты и убедиться, что сайт правильно принимает и обрабатывает валидные cookies AWS WAF.
Важно: данные примеры кода используют cookieSolution=False. Если в результате вам нужно получить куки, устанавливайте 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";
// Настройки прокси
const PROXY = {
proxyType: "http",
proxyAddress: "PROXY_HOST",
proxyPort: 1234,
proxyLogin: "PROXY_USER",
proxyPassword: "PROXY_PASS"
};
(async () => {
// 1) Открываем страницу через прокси и собираем параметры 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" });
// ждём загрузки challenge и 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"));
});
// извлекаем параметры AWS WAF (ключ, context, iv, ссылки на скрипты)
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) Решаем AWS WAF через 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) Подставляем aws-waf-token и очищаем старые
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();
// очистка старых aws-waf-token для вашего домена
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);
// установка нового 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 нельзя установить на сайт напрямую. Он работает только через AWS-ресурсы:
Шаг 1. Создайте AWS-аккаунт (если его нет)
Перейдите: https://portal.aws.amazon.com/billing/signup. Создайте аккаунт > подтвердите email и телефон.
Шаг 2. Вы можете использовать стандартный или новый интерфейс AWS WAF:
Шаг 3. Создайте protection pack (web ACL)
Это и есть набор правил защиты для вашего ресурса.
Шаг 4. Настройте категорию приложения:
В блоке Tell us about your app:
Эти параметры нужны, чтобы AWS предложил оптимальные правила.
Шаг 5. Выберите ресурсы, которые будут защищаться
Если ваш сайт на CloudFront > выберите CloudFront distributions
Если ваш бекенд на ALB > выберите Regional resourcesЕсли API > выберите API Gateway REST APIПоставьте галочку на нужном ресурсе > нажмите Add.
Шаг 6. Выберите стартовый набор правил.
AWS предложит:
Recommended for you — лучший вариант для новичков
Он включает:Нажмите Next.
Шаг 7. Настройка (опционально)
На экране Customize protection pack (web ACL):
Основные параметры:
Логирование
Выберите, куда писать логи:
(рекомендуется S3 + Athena).
Шаг 8. Создать web ACL
Нажмите: Add protection pack (web ACL)
AWS создаст правила и привяжет их к вашему ресурсу.
Проверка
Чтобы убедиться, что защита работает:
В любом правиле > Action > CAPTCHA / Challenge
Это снижает бототрафик и защищает страницы входа и форм.
В разделе Rule groups можно добавить:
Если вам достался сайт с уже установленной капчей или другой системой защиты и при этом нет доступа к коду — ничего страшного! Определить, какая именно технология используется, достаточно легко. А для проверки корректности работы можно использовать сервис распознавания CapMonster Cloud в изолированной тестовой среде, чтобы убедиться, что механизм обработки токенов и логика проверки функционируют корректно.
В случае с Amazon AWS WAF — достаточно распознать систему, изучить её поведение и убедиться, что защита функционирует корректно. В статье мы показали, как определить Amazon AWS WAF и где найти инструкции по её подключению или перенастройке, чтобы уверенно поддерживать защиту и контролировать её работу.