В этой статье мы постарались дать ответы на все вопросы. А начать решение задачи нужно с определения того, какая система защиты используется. Для этого можно обратиться к списку популярных капч и систем антибот-защиты, где представлены визуальные примеры и ключевые признаки, которые могут помочь быстро определить, с чем вы имеете дело.
Если вы обнаружили, что на вашем сайте используется Amazon AWS WAF, следующим шагом станет более подробное изучение её свойств и самой работы. Также в этой статье вы можете изучить инструкцию по подключению системы Amazon AWS WAF, чтобы полностью разобраться, как она функционирует на вашем сайте. Это позволит не только понимать текущую защиту, но и грамотно планировать её поддержку.
AWS WAF (Amazon Web Services Web Application Firewall) — это облачный веб-фаервол от Amazon, который защищает сайты, API и веб-приложения от атак и вредного трафика. Проще говоря, это фильтр, который стоит перед вашим сайтом или API и решает, какой трафик посетителей пропускать, а какой блокировать.
Если на сайте включён Challenge/CAPTCHA, посетитель может увидеть отдельную страницу с проверкой. Ему будет предложено выполнить задание, например, выбрать все изображения из одной категории, чтобы подтвердить, что он не бот.
Как решить AWS WAF через CapMonster Cloud
При тестировании ресурсов, защищённых AWS WAF, важно убедиться, что защита работает корректно и интегрирована правильно.
Вы можете вручную проверить работу защиты:
- Откройте страницу с формой или ресурсом и убедитесь, что AWS WAF корректно реагирует на запросы.
- Попробуйте выполнить действия, которые могут быть ограничены 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 :
- http - обычный HTTP/HTTPS-прокси;
- https - пробуйте этот вариант, если «http» не работает (требуется для некоторых кастомных прокси);
- socks4 - прокси типа SOCKS4;
- socks5 - прокси типа SOCKS5;
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/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"
}
}Полученные от CapMonster Cloud данные (валидные cookies AWS WAF) можно подставить в браузерный контекст или HTTP-клиент. После этого сайт воспринимает запрос как прошедший проверку и позволяет продолжить работу без дополнительных проверок или challenge-страниц.
Для автоматизации и тестирования удобно использовать Puppeteer, Selenium или Playwright — они позволяют:
- открыть страницу, защищённую AWS WAF;
- добавить полученные cookies в контекст браузера;
- обновить страницу уже с валидной проверкой;
- выполнять дальнейшие действия (отправлять формы, переходить по страницам, тестировать функциональность).
Так можно проверить корректность работы защиты и убедиться, что сайт правильно принимает и обрабатывает валидные 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-ресурсы:
- Amazon CloudFront (основной и лучший вариант) — CDN, через который можно защитить любой сайт. Работает быстро, глобально и подходит практически во всех случаях.
- Application Load Balancer (ALB) — используется для серверных сайтов, API и контейнеров внутри AWS. Если ваш backend работает в EC2, ECS, EKS — ставьте WAF на ALB.
- API Gateway — защита REST и WebSocket API. Подходит для SPA, мобильных приложений и микросервисов.
- AWS AppSync (GraphQL API)
- Amazon Cognito (логин/регистрация)
- AWS App Runner (контейнерные приложения)
- AWS Amplify Hosting (frontend-хостинг)
- AWS Verified Access (доступ к внутренним приложениям)
Шаг 1. Создайте AWS-аккаунт (если его нет)
Перейдите: https://portal.aws.amazon.com/billing/signup. Создайте аккаунт > подтвердите email и телефон.
Шаг 2. Вы можете использовать стандартный или новый интерфейс AWS WAF:
- Перейдите в консоль AWS
- Откройте AWS WAF. В левом меню нажмите Try the new experience (если предложит).
Шаг 3. Создайте protection pack (web ACL)
Это и есть набор правил защиты для вашего ресурса.
- В меню слева выберите: Resources & protection packs (Web ACLs)
- Нажмите Add protection pack (web ACL).
Шаг 4. Настройте категорию приложения:
В блоке Tell us about your app:
- App category — выберите Web / API / Both
- Traffic source — откуда идёт трафик (web, API или оба)
Эти параметры нужны, чтобы AWS предложил оптимальные правила.
Шаг 5. Выберите ресурсы, которые будут защищаться
- Нажмите Add resources
- Выберите, что подключаете:
Если ваш сайт на CloudFront > выберите CloudFront distributions
Если ваш бекенд на ALB > выберите Regional resourcesЕсли API > выберите API Gateway REST APIПоставьте галочку на нужном ресурсе > нажмите Add.
Шаг 6. Выберите стартовый набор правил.
AWS предложит:
Recommended for you — лучший вариант для новичков
Он включает:- базовую защиту
- правила против SQLi и XSS
- IP reputation lists
- Bot Control (опционально)
- правила под web/API
Нажмите Next.
Шаг 7. Настройка (опционально)
На экране Customize protection pack (web ACL):
Основные параметры:
- Default action:
- Allow all except blocked — обычно выбирают это
- Block all except allowed — если сайт закрытый
- Default rate limits: Ограничение по количеству запросов (DDoS L7 mitigation)
- IP addresses: Белые/черные списки
- Country specific origins: Ограничение трафика по странам
Логирование
Выберите, куда писать логи:
- CloudWatch
- S3
- Firehose
(рекомендуется S3 + Athena).
Шаг 8. Создать web ACL
Нажмите: Add protection pack (web ACL)
AWS создаст правила и привяжет их к вашему ресурсу.
Проверка
Чтобы убедиться, что защита работает:
- Откройте WAF > выберите ваш web ACL
- Перейдите в Monitoring
- Посмотрите:
- графики по трафику
- блокированные запросы
- sample requests
- Включить CAPTCHA или Challenge
В любом правиле > Action > CAPTCHA / Challenge
Это снижает бототрафик и защищает страницы входа и форм.
- Добавить Managed Rule Groups
В разделе Rule groups можно добавить:
- AWS Managed
- Bot Control
- Account takeover prevention
- Marketplace rules (F5, Imperva, Fortinet)
- Связать со Shield Advanced. Для защиты от DDoS (L3–L7).
Поддержка капч
Если вам достался сайт с уже установленной капчей или другой системой защиты и при этом нет доступа к коду — ничего страшного! Определить, какая именно технология используется, достаточно легко. А для проверки корректности работы можно использовать сервис распознавания CapMonster Cloud в изолированной тестовой среде, чтобы убедиться, что механизм обработки токенов и логика проверки функционируют корректно.
В случае с Amazon AWS WAF — достаточно распознать систему, изучить её поведение и убедиться, что защита функционирует корректно. В статье мы показали, как определить Amazon AWS WAF и где найти инструкции по её подключению или перенастройке, чтобы уверенно поддерживать защиту и контролировать её работу.