logo
bars

Amazon AWS WAF
и CapMonster Cloud

Решение капчи, установка на сайт и тестирование.
Вам достался «по наследству» сайт с подключённой капчей или другой защитой, но доступа к исходному коду нет? В такой ситуации возникают вопросы: какую именно систему защиты использует сайт, правильно ли она установлена и как проверить её работу?

В этой статье мы постарались дать ответы на все вопросы. А начать решение задачи нужно с определения того, какая система защиты используется. Для этого можно обратиться к списку популярных капч и систем антибот-защиты, где представлены визуальные примеры и ключевые признаки, которые могут помочь быстро определить, с чем вы имеете дело.

Если вы обнаружили, что на вашем сайте используется Amazon AWS WAF, следующим шагом станет более подробное изучение её свойств и самой работы. Также в этой статье вы можете изучить инструкцию по подключению системы Amazon AWS WAF, чтобы полностью разобраться, как она функционирует на вашем сайте. Это позволит не только понимать текущую защиту, но и грамотно планировать её поддержку.

Что такое AWS WAF от Amazon
Что такое AWS WAF от Amazon

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 обычно включает следующие шаги:

Создание задачи (Task)Создание задачи (Task)
arrow
Отправка запроса к APIОтправка запроса к API
arrow
Получение результатаПолучение результата
arrow
Подстановка cookies aws-waf-token на страницуПодстановка cookies aws-waf-token на страницу
arrow
Распознавание Amazon AWS WAF с использованием готовых библиотек
Сервис CapMonster Cloud предоставляет готовые библиотеки для удобной работы на языках Python, JavaScript (Node.js) и C#.

Важно: данные примеры кода используют cookieSolution=False. Если в результате вам нужно получить куки, устанавливайте cookieSolution=True.

Python
JavaScript
C#
Решение, получение параметров и установка куки
Пример на Node.js для полного цикла распознавания капчи на вашей веб-странице. Возможные подходы: использовать HTTP-запросы для получения HTML и параметров системы защиты, отправить ответ и обработать результат. Или с помощью инструментов для автоматизации (например, Playwright) — открыть страницу, дождаться проверки, отправить параметры через клиент CapMonster Cloud, получить результат, подставить куки в браузер (для тестирования вы можете использовать как правильные, так и некорректные данные) и увидеть результат.
// 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 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:

  1. Перейдите в консоль AWS
  2. Откройте AWS WAF. В левом меню нажмите Try the new experience (если предложит).

Шаг 3. Создайте protection pack (web ACL)

Это и есть набор правил защиты для вашего ресурса.

  1. В меню слева выберите: Resources & protection packs (Web ACLs)
  2. Нажмите Add protection pack (web ACL).

Шаг 4. Настройте категорию приложения:

В блоке Tell us about your app:

  • App category — выберите Web / API / Both
  • Traffic source — откуда идёт трафик (web, API или оба)

Эти параметры нужны, чтобы AWS предложил оптимальные правила.

Шаг 5. Выберите ресурсы, которые будут защищаться

  1. Нажмите Add resources
  2. Выберите, что подключаете:

Если ваш сайт на 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 создаст правила и привяжет их к вашему ресурсу.

Проверка

Чтобы убедиться, что защита работает:

  1. Откройте WAF > выберите ваш web ACL
  2. Перейдите в Monitoring
  3. Посмотрите:
    • графики по трафику
    • блокированные запросы
    • 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).

Background
Возможные ошибки и отладка
Bug Icon
Неверный домен или правило — Challenge не отображается
Проверьте, что AWS WAF WebACL привязан к нужному домену (CloudFront Distribution / ALB / API Gateway), корректному пути и что нет конфликтов между правилами.
Bug Icon
Таймаут загрузки страницы или проверки
Иногда браузер или скрипт не дожидается ответа AWS WAF. Увеличьте таймауты в тестах и убедитесь, что backend обрабатывает запросы без задержек.
Bug Icon
Просроченные AWS WAF cookies
Устаревшие _aws_waf_token_… или связанные cookie-метки приводят к повторному Challenge или временной блокировке.
Bug Icon
Чрезмерно чувствительные правила
Избыточно строгие сигнатуры Bot Control, CAPTCHA rules или Rate-based правила могут блокировать реальных пользователей.
Bug Icon
Неверная конфигурация WebACL
Ошибки в порядке правил, приоритетах или условиях могут приводить к ложным срабатываниям и блокировкам.
Проверка устойчивости защиты
После интеграции важно убедиться, что система действительно защищает сайт от автоматических действий.
Рекомендации по безопасности и оптимизации
Настройте WebACL согласно уровню риска. Используйте Managed Rules (AWS, AWS Marketplace), AWS Bot Control и кастомные правила на основе IP reputation, headers, rate limiting и других условий.
Логируйте события WAF. Включите <a href="https://docs.aws.amazon.com/waf/latest/developerguide/logging.html" target="_blank">AWS WAF Logging (Kinesis Firehose / S3 / CloudWatch Logs)</a> для анализа ложных срабатываний и оптимизации правил.
Добавьте ссылки на <b>Политику конфиденциальности</b> и <b>Условия использования</b>. Это важно для прозрачности и соответствия требованиям безопасности и пользовательским ожиданиям.
Заключение

Если вам достался сайт с уже установленной капчей или другой системой защиты и при этом нет доступа к коду — ничего страшного! Определить, какая именно технология используется, достаточно легко. А для проверки корректности работы можно использовать сервис распознавания CapMonster Cloud в изолированной тестовой среде, чтобы убедиться, что механизм обработки токенов и логика проверки функционируют корректно.

В случае с Amazon AWS WAF — достаточно распознать систему, изучить её поведение и убедиться, что защита функционирует корректно. В статье мы показали, как определить Amazon AWS WAF и где найти инструкции по её подключению или перенастройке, чтобы уверенно поддерживать защиту и контролировать её работу.

Conclusion
Полезные ссылки
DocIconДокументация AWS WAF DocIconДокументация CapMonster Cloud (работа с AWS WAF)DocIconОбзор защиты веб-ресурсов с помощью AWS WAF