logo
bars

Amazon AWS WAF
i CapMonster Cloud

Rozwiązywanie captcha, instalacja na stronie i testowanie.
Odziedziczyłeś stronę z już wdrożoną captchą lub ochroną, ale bez dostępu do kodu źródłowego? Naturalnie pojawia się pytanie, jaka technologia jest używana, czy działa poprawnie i jak ją przetestować.

W tym artykule staraliśmy się odpowiedzieć na wszystkie najważniejsze pytania. Pierwszym krokiem w rozwiązywaniu problemu jest ustalenie, jaki system ochrony jest używany. W tym celu możesz skorzystać z listy popularnych captcha i systemów ochrony antybotowej, gdzie znajdziesz przykłady graficzne oraz kluczowe cechy, które pomogą szybko rozpoznać, z czym masz do czynienia.

Jeśli okaże się, że na Twojej stronie używany jest Amazon AWS WAF, kolejnym krokiem będzie dokładniejsze poznanie jej właściwości i sposobu działania. W tym artykule możesz również zapoznać się z instrukcją integracji systemu Amazon AWS WAF, aby w pełni zrozumieć, jak funkcjonuje on na Twojej stronie. Dzięki temu nie tylko lepiej poznasz obecną ochronę, ale też świadomie zaplanujesz jej dalsze utrzymanie.

Czym jest AWS WAF od Amazon
Czym jest AWS WAF od Amazon

AWS WAF (Amazon Web Services Web Application Firewall) — to chmurowy firewall aplikacji internetowych od Amazon, który chroni strony, API i aplikacje internetowe przed atakami i szkodliwym ruchem. Mówiąc prościej, jest to filtr, który stoi przed Twoją stroną lub API i decyduje, jaki ruch odwiedzających przepuścić, a jaki zablokować.

Jeśli na stronie włączone jest wyzwanie (Challenge/CAPTCHA), odwiedzający może zobaczyć osobną stronę weryfikacyjną. Zostanie poproszony o wykonanie zadania, na przykład wybranie wszystkich obrazków z jednej kategorii, aby potwierdzić, że nie jest botem.

Jak rozwiązać AWS WAF za pomocą CapMonster Cloud

Podczas testowania zasobów chronionych przez AWS WAF ważne jest, aby upewnić się, że ochrona działa poprawnie i jest właściwie zintegrowana.

Możesz ręcznie sprawdzić działanie ochrony:

  • Otwórz stronę z formularzem lub zasobem i upewnij się, że AWS WAF poprawnie reaguje na zapytania.
  • Spróbuj wykonać działania, które mogą być ograniczone przez WAF (np. masowe zapytania, podejrzane nagłówki) — serwer powinien zablokować takie zapytania lub zwrócić błąd.

Po pomyślnym przejściu weryfikacji AWS WAF ustawia pliki cookie, które potwierdzają, że użytkownik lub klient przeszedł kontrolę i zaufany ruch jest dozwolony.

Do automatycznego rozpoznawania captcha można użyć wyspecjalizowanych usług, na przykład CapMonster Cloud — narzędzia, które przyjmuje parametry captcha, przetwarza je na swoich serwerach i zwraca gotowe pliki cookie lub token. Można je wstawić do przeglądarki, aby przejść weryfikację bez udziału użytkownika.

Praca z CapMonster Cloud poprzez API zazwyczaj obejmuje następujące kroki:

Tworzenie zadaniaTworzenie zadania
arrow
Wysyłanie żądania APIWysyłanie żądania API
arrow
Odebranie wynikuOdebranie wyniku
arrow
Podstawianie plików cookie aws-waf-token na stronęPodstawianie plików cookie aws-waf-token na stronę
arrow
Rozpoznawanie Amazon AWS WAF przy użyciu gotowych bibliotek
Usługa CapMonster Cloud udostępnia gotowe biblioteki do wygodnej pracy w językach Python, JavaScript (Node.js) i C#.

Ważne: te przykłady kodu używają cookieSolution=False. Jeśli w rezultacie musisz otrzymać pliki cookie, ustaw cookieSolution=True.

Python
JavaScript
C#
Rozwiązanie, pobranie parametrów i ustawienie plików cookie
Przykład w Node.js dla pełnego cyklu rozpoznawania captcha na Twojej stronie internetowej. Możliwe podejścia: użycie zapytań HTTP do pobrania HTML i parametrów systemu ochrony, wysłanie odpowiedzi i przetworzenie wyniku. Lub za pomocą narzędzi do automatyzacji (np. Playwright) — otwórz stronę, poczekaj na weryfikację, wyślij parametry przez klienta CapMonster Cloud, uzyskaj wynik, wstaw pliki cookie do przeglądarki (do testów możesz użyć zarówno poprawnych, jak i niepoprawnych danych) i zobacz wynik.
// 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";

// Ustawienia proxy
const PROXY = {
    proxyType: "http",
    proxyAddress: "PROXY_HOST",
    proxyPort: 1234,
    proxyLogin: "PROXY_USER",
    proxyPassword: "PROXY_PASS"
};

(async () => {
    // 1) Otwieramy stronę przez proxy i zbieramy parametry 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" });

    // czekamy na załadowanie skryptów challenge i 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"));
    });

    // wyciągamy parametry AWS WAF (klucz, context, iv, linki do skryptów)
    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) Rozwiązujemy AWS WAF przez 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) Podstawiamy aws-waf-token i czyścimy stare
    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();

    // czyszczenie starych aws-waf-token dla twojej domeny
    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);

    // ustawienie nowego 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();
})();
Jak podłączyć AWS WAF do swojej strony
Aby pewnie orientować się w działaniu captcha na Twojej stronie, rozumieć logikę jej weryfikacji, ponownie ją podłączyć lub skonfigurować, zalecamy zapoznanie się z tą sekcją. Opisano w niej proces podłączania ochrony — pomoże to szybko zrozumieć wszystkie niuanse.

AWS WAF nie można zainstalować bezpośrednio na stronie. Działa tylko za pośrednictwem zasobów AWS:

  • Amazon CloudFront (główna i najlepsza opcja) — CDN, za pomocą którego można chronić dowolną stronę. Działa szybko, globalnie i nadaje się do prawie wszystkich przypadków.
  • Application Load Balancer (ALB) — używany dla stron serwerowych, API i kontenerów wewnątrz AWS. Jeśli Twój backend działa w EC2, ECS, EKS — umieść WAF na ALB.
  • API Gateway — ochrona API REST i WebSocket. Odpowiednie dla SPA, aplikacji mobilnych i mikrousług.
  • AWS AppSync (GraphQL API)
  • Amazon Cognito (logowanie/rejestracja)
  • AWS App Runner (aplikacje w kontenerach)
  • AWS Amplify Hosting (hosting frontendowy)
  • AWS Verified Access (dostęp do aplikacji wewnętrznych)

Krok 1. Utwórz konto AWS (jeśli go nie masz)

Przejdź do: https://portal.aws.amazon.com/billing/signup. Utwórz konto > potwierdź e-mail i telefon.

Krok 2. Możesz użyć interfejsu standardowego lub nowego interfejsu AWS WAF:

  1. Przejdź do konsoli AWS
  2. Otwórz AWS WAF. W lewym menu kliknij Try the new experience (jeśli jest oferowane).

Krok 3. Utwórz pakiet ochrony (web ACL)

To jest zestaw reguł ochrony dla Twojego zasobu.

  1. W menu po lewej wybierz: Resources & protection packs (Web ACLs)
  2. Kliknij Add protection pack (web ACL).

Krok 4. Skonfiguruj kategorię aplikacji:

W bloku Tell us about your app:

  • App category — wybierz Web / API / Both
  • Traffic source — skąd pochodzi ruch (web, API lub oba)

Te parametry są potrzebne, aby AWS zaproponował optymalne reguły.

Krok 5. Wybierz zasoby, które będą chronione

  1. Kliknij Add resources
  2. Wybierz, co podłączasz:

Jeśli Twoja strona jest na CloudFront > wybierz CloudFront distributions
Jeśli Twój backend jest na ALB > wybierz Regional resources
Jeśli API > wybierz API Gateway REST API
Zaznacz odpowiedni zasób > kliknij Add.

Krok 6. Wybierz początkowy zestaw reguł.

AWS zaproponuje:

Recommended for you — najlepsza opcja dla początkujących

Zawiera on:

  • podstawową ochronę
  • reguły przeciwko SQLi i XSS
  • IP reputation lists (listy reputacji IP)
  • Bot Control (opcjonalnie)
  • reguły dla web/API

Kliknij Next.

Krok 7. Konfiguracja (opcjonalnie)

Na ekranie Customize protection pack (web ACL):

Główne parametry:

  • Default action:
    • Allow all except blocked — zazwyczaj wybiera się to
    • Block all except allowed — jeśli strona jest zamknięta
  • Default rate limits: Ograniczenie liczby zapytań (DDoS L7 mitigation)
  • IP addresses: Białe/czarne listy
  • Country specific origins: Ograniczenie ruchu według krajów

Logowanie (Logging)

Wybierz, gdzie zapisywać logi:

  • CloudWatch
  • S3
  • Firehose

(zalecane S3 + Athena).

Krok 8. Utwórz Web ACL

Kliknij: Add protection pack (web ACL)

AWS utworzy reguły i powiąże je z Twoim zasobem.

Weryfikacja

Aby upewnić się, że ochrona działa:

  1. Otwórz WAF > wybierz swój web ACL
  2. Przejdź do Monitoring
  3. Zobacz:
    • wykresy ruchu
    • zablokowane zapytania
    • przykładowe zapytania (sample requests)

Dodatkowo (opcjonalnie)

  • Włącz CAPTCHA lub Challenge

    W dowolnej regule > Action > CAPTCHA / Challenge

    Zmniejsza to ruch botów i chroni strony logowania oraz formularzy.

  • Dodaj Managed Rule Groups

    W sekcji Rule groups możesz dodać:

    • AWS Managed
    • Bot Control
    • Account takeover prevention
    • Marketplace rules (F5, Imperva, Fortinet)
  • Połącz z Shield Advanced. Dla ochrony przed DDoS (L3–L7).

Background
Możliwe błędy i debugowanie
Bug Icon
Nieprawidłowa domena lub reguła — Challenge się nie wyświetla
Sprawdź, czy AWS WAF WebACL jest przypisany do właściwej domeny (CloudFront Distribution / ALB / API Gateway), poprawnej ścieżki i czy nie ma konfliktów między regułami.
Bug Icon
Limit czasu ładowania strony lub weryfikacji
Czasami przeglądarka lub skrypt nie czeka na odpowiedź AWS WAF. Zwiększ limity czasu (timeout) w testach i upewnij się, że backend przetwarza żądania bez opóźnień.
Bug Icon
Przeterminowane pliki cookie AWS WAF
Przestarzałe _aws_waf_token_… lub powiązane znaczniki plików cookie prowadzą do ponownego wyzwania (Challenge) lub tymczasowej blokady.
Bug Icon
Zbyt czułe reguły
Zbyt rygorystyczne sygnatury Bot Control, reguły CAPTCHA lub reguły oparte na częstotliwości (Rate-based) mogą blokować prawdziwych użytkowników.
Bug Icon
Nieprawidłowa konfiguracja WebACL
Błędy w kolejności reguł, priorytetach lub warunkach mogą prowadzić do fałszywych alarmów (false positives) i blokad.
Sprawdzenie odporności ochrony
Po integracji upewnij się, że system faktycznie chroni stronę przed automatycznymi działaniami.
Rekomendacje dotyczące bezpieczeństwa i optymalizacji
Skonfiguruj WebACL zgodnie z poziomem ryzyka. Używaj Managed Rules (AWS, AWS Marketplace), AWS Bot Control i niestandardowych reguł opartych na reputacji IP, nagłówkach, limitach częstotliwości i innych warunkach.
Loguj zdarzenia WAF. Włącz <a href="https://docs.aws.amazon.com/waf/latest/developerguide/logging.html" target="_blank">AWS WAF Logging (Kinesis Firehose / S3 / CloudWatch Logs)</a> do analizy fałszywych alarmów i optymalizacji reguł.
Dodaj linki do <b>Polityki prywatności</b> i <b>Warunków użytkowania</b>. Jest to ważne dla przejrzystości i zgodności z wymogami bezpieczeństwa oraz oczekiwaniami użytkowników.
Wnioski

Jeśli przejąłeś stronę internetową, na której jest już zainstalowany captcha lub inny system zabezpieczeń, a jednocześnie nie masz dostępu do kodu — to nic strasznego! Dość łatwo jest ustalić, jaka dokładnie technologia jest używana. Aby sprawdzić poprawność działania, możesz skorzystać z usługi rozpoznawania CapMonster Cloud w odizolowanym środowisku testowym, żeby upewnić się, że mechanizm przetwarzania tokenów i logika weryfikacji działają prawidłowo.

W przypadku Amazon AWS WAF wystarczy rozpoznać system, przeanalizować jego zachowanie i upewnić się, że zabezpieczenie działa poprawnie. W artykule pokazaliśmy, jak zidentyfikować Amazon AWS WAF oraz gdzie znaleźć instrukcje dotyczące jego podłączenia lub ponownej konfiguracji, aby móc pewnie utrzymywać ochronę i kontrolować jej działanie.

Conclusion
Przydatne linki
DocIconDokumentacja AWS WAFDocIconDokumentacja CapMonster Cloud (praca z AWS WAF)DocIconPrzegląd ochrony zasobów internetowych za pomocą AWS WAF