Amazon AWS WAF
en CapMonster Cloud

Captcha oplossen, installatie op de site en testen.

Prijzen van Amazon AWS WAF-oplossing

Bericht
Prijs (USD)
$ 1.40
1000 tokens
Heb je een site geërfd met een ingebouwde captcha of andere bescherming, maar zonder toegang tot de broncode? Dan wil je natuurlijk weten welke oplossing draait, of die goed is ingesteld en hoe je de werking test.

In dit artikel hebben we geprobeerd antwoord te geven op alle belangrijke vragen. De eerste stap bij het oplossen van het vraagstuk is vaststellen welk beveiligingssysteem wordt gebruikt. Daarvoor kun je de lijst met populaire captcha’s en anti-botbeveiligingssystemen raadplegen, met visuele voorbeelden en kernkenmerken die je helpen snel te bepalen waarmee je te maken hebt.

Als je ontdekt dat je website Amazon AWS WAF gebruikt, is de volgende stap om de eigenschappen en werking ervan uitgebreider te bestuderen. In dit artikel vind je ook een handleiding voor het integreren van Amazon AWS WAF, zodat je volledig begrijpt hoe het systeem op je website werkt. Zo kun je niet alleen de huidige bescherming beter doorgronden, maar ook het onderhoud ervan goed plannen.

Wat is AWS WAF van Amazon
Wat is AWS WAF van Amazon

AWS WAF (Amazon Web Services Web Application Firewall) is een cloud-webfirewall van Amazon die websites, API's en webapplicaties beschermt tegen aanvallen en schadelijk verkeer. Simpel gezegd is het een filter dat voor uw site of API staat en beslist welk bezoekersverkeer wordt doorgelaten en welk verkeer wordt geblokkeerd.

Als Challenge/CAPTCHA is ingeschakeld op de site, kan de bezoeker een aparte verificatiepagina zien. Er wordt gevraagd om een taak uit te voeren, bijvoorbeeld het selecteren van alle afbeeldingen uit één categorie, om te bevestigen dat het geen bot is.

Hoe AWS WAF op te lossen via CapMonster Cloud

Bij het testen van bronnen die door AWS WAF worden beschermd, is het belangrijk om ervoor te zorgen dat de bescherming correct werkt en goed is geïntegreerd.

U kunt de werking van de bescherming handmatig controleren:

  • Open de pagina met het formulier of de bron en controleer of AWS WAF correct reageert op verzoeken.
  • Probeer acties uit te voeren die door de WAF kunnen worden beperkt (bijvoorbeeld massale verzoeken, verdachte headers) — de server moet dergelijke verzoeken blokkeren of een foutmelding retourneren.

Na een succesvolle controle stelt AWS WAF cookies in die bevestigen dat de gebruiker of client de controle heeft doorstaan en dat vertrouwd verkeer is toegestaan.

Voor automatische captcha-herkenning kunt u gespecialiseerde diensten gebruiken, bijvoorbeeld CapMonster Cloud — een tool die captcha-parameters accepteert, deze op zijn servers verwerkt en kant-en-klare cookies of een token retourneert. Deze kunnen in de browser worden geplaatst om de controle zonder tussenkomst van de gebruiker te doorstaan.

Werken met CapMonster Cloud via de API bestaat doorgaans uit de volgende stappen:

Taak aanmakenTaak aanmaken
arrow
API-aanvraag versturenAPI-aanvraag versturen
arrow
Resultaat ontvangenResultaat ontvangen
arrow
Plaatsen van aws-waf-token cookies op de paginaPlaatsen van aws-waf-token cookies op de pagina
arrow
Herkenning van Amazon AWS WAF met behulp van kant-en-klare bibliotheken
De CapMonster Cloud-service biedt kant-en-klare bibliotheken voor comfortabel werken in de talen Python, JavaScript (Node.js) en C#.

Belangrijk: deze codevoorbeelden gebruiken cookieSolution=False. Als u als resultaat cookies moet ontvangen, stel dan cookieSolution=True in.

Python
JavaScript
C#
Oplossen, parameters verkrijgen en cookies instellen
Voorbeeld in Node.js voor de volledige cyclus van captcha-herkenning op uw webpagina. Mogelijke benaderingen: gebruik HTTP-verzoeken om HTML en parameters van het beveiligingssysteem te verkrijgen, stuur het antwoord en verwerk het resultaat. Of met behulp van automatiseringstools (bijvoorbeeld Playwright) — open de pagina, wacht op de controle, stuur parameters via de CapMonster Cloud-client, ontvang het resultaat, plaats cookies in de browser (voor tests kunt u zowel correcte als onjuiste gegevens gebruiken) en bekijk het resultaat.
// 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";

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

(async () => {
    // 1) We openen de pagina via proxy en verzamelen AWS WAF-parameters
    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" });

    // wachten op het laden van challenge- en captcha-scripts
    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-parameters extraheren (sleutel, context, iv, links naar 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) We lossen AWS WAF op via 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) We plaatsen aws-waf-token en schonen oude op
    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();

    // opschonen van oude aws-waf-token voor uw domein
    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);

    // instellen van de nieuwe 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();
})();
Hoe AWS WAF aan uw site te koppelen
Om zeker te zijn van de werking van de captcha op uw site, de logica van de verificatie te begrijpen, opnieuw te verbinden of opnieuw te configureren, raden we u aan dit gedeelte te bestuderen. Het beschrijft het proces van het aansluiten van de beveiliging — dit helpt u snel alle nuances te begrijpen.

AWS WAF kan niet rechtstreeks op een site worden geïnstalleerd. Het werkt alleen via AWS-bronnen:

  • Amazon CloudFront (belangrijkste en beste optie) — een CDN waarmee elke site kan worden beschermd. Werkt snel, wereldwijd en is geschikt voor bijna alle gevallen.
  • Application Load Balancer (ALB) — wordt gebruikt voor server-side sites, API's en containers binnen AWS. Als uw backend in EC2, ECS, EKS draait — plaats WAF op de ALB.
  • API Gateway — bescherming van REST en WebSocket API's. Geschikt voor SPA, mobiele apps en microservices.
  • AWS AppSync (GraphQL API)
  • Amazon Cognito (login/registratie)
  • AWS App Runner (containerapplicaties)
  • AWS Amplify Hosting (frontend-hosting)
  • AWS Verified Access (toegang tot interne applicaties)

Stap 1. Maak een AWS-account aan (als u er geen heeft)

Ga naar: https://portal.aws.amazon.com/billing/signup. Maak een account aan > bevestig e-mail en telefoon.

Stap 2. U kunt de standaard of nieuwe AWS WAF-interface gebruiken:

  1. Ga naar de AWS Console
  2. Open AWS WAF. Klik in het linkermenu op Try the new experience (indien aangeboden).

Stap 3. Maak een protection pack (web ACL) aan

Dit is de set beschermingsregels voor uw bron.

  1. Selecteer in het menu links: Resources & protection packs (Web ACLs)
  2. Klik op Add protection pack (web ACL).

Stap 4. Configureer de applicatiecategorie:

In het blok Tell us about your app:

  • App category — kies Web / API / Both
  • Traffic source — waar het verkeer vandaan komt (web, API of beide)

Deze parameters zijn nodig zodat AWS optimale regels kan voorstellen.

Stap 5. Selecteer de bronnen die beschermd moeten worden

  1. Klik op Add resources
  2. Kies wat u verbindt:

Als uw site op CloudFront staat > kies CloudFront distributions
Als uw backend op ALB staat > kies Regional resources
Als API > kies API Gateway REST API
Vink de gewenste bron aan > klik op Add.

Stap 6. Selecteer een start-regelset.

AWS zal voorstellen:

Recommended for you — de beste optie voor beginners

Het bevat:

  • basisbescherming
  • regels tegen SQLi en XSS
  • IP reputation lists (IP-reputatielijsten)
  • Bot Control (optioneel)
  • regels voor web/API

Klik op Next.

Stap 7. Configuratie (optioneel)

Op het scherm Customize protection pack (web ACL):

Hoofdparameters:

  • Default action:
    • Allow all except blocked — meestal wordt dit gekozen
    • Block all except allowed — als de site gesloten is
  • Default rate limits: Beperking van het aantal verzoeken (DDoS L7 mitigation)
  • IP addresses: Whitelists/blacklists
  • Country specific origins: Verkeersbeperking per land

Logging

Kies waar logs worden weggeschreven:

  • CloudWatch
  • S3
  • Firehose

(S3 + Athena wordt aanbevolen).

Stap 8. Web ACL aanmaken

Klik op: Add protection pack (web ACL)

AWS maakt de regels aan en koppelt ze aan uw bron.

Verificatie

Om er zeker van te zijn dat de bescherming werkt:

  1. Open WAF > selecteer uw web ACL
  2. Ga naar Monitoring
  3. Bekijk:
    • verkeersgrafieken
    • geblokkeerde verzoeken
    • voorbeeldverzoeken (sample requests)

Aanvullend (optioneel)

  • Schakel CAPTCHA of Challenge in

    In elke regel > Action > CAPTCHA / Challenge

    Dit vermindert botverkeer en beschermt login- en formulierpagina's.

  • Voeg Managed Rule Groups toe

    In de sectie Rule groups kunt u toevoegen:

    • AWS Managed
    • Bot Control
    • Account takeover prevention
    • Marketplace regels (F5, Imperva, Fortinet)
  • Koppel met Shield Advanced. Voor bescherming tegen DDoS (L3–L7).

Background
Mogelijke fouten en debugging
Bug Icon
Ongeldig domein of regel — Challenge wordt niet weergegeven
Controleer of de AWS WAF WebACL is gekoppeld aan het juiste domein (CloudFront Distribution / ALB / API Gateway), het juiste pad en of er geen conflicten zijn tussen regels.
Bug Icon
Time-out bij het laden van de pagina of controle
Soms wacht de browser of het script niet op het antwoord van AWS WAF. Verhoog de time-outs in tests en zorg ervoor dat de backend verzoeken zonder vertraging verwerkt.
Bug Icon
Verlopen AWS WAF-cookies
Verouderde _aws_waf_token_… of gerelateerde cookie-tags leiden tot een herhaalde Challenge of tijdelijke blokkering.
Bug Icon
Overgevoelige regels
Te strikte Bot Control-handtekeningen, CAPTCHA-regels of Rate-based regels kunnen echte gebruikers blokkeren.
Bug Icon
Onjuiste WebACL-configuratie
Fouten in de volgorde van regels, prioriteiten of voorwaarden kunnen leiden tot valse positieven en blokkades.
Controle van de robuustheid
Controleer na de integratie of het systeem de site echt beschermt tegen geautomatiseerde acties.
Aanbevelingen voor veiligheid en optimalisatie
Configureer WebACL volgens het risiconiveau. Gebruik Managed Rules (AWS, AWS Marketplace), AWS Bot Control en aangepaste regels op basis van IP-reputatie, headers, rate limiting en andere voorwaarden.
Log WAF-gebeurtenissen. Schakel <a href="https://docs.aws.amazon.com/waf/latest/developerguide/logging.html" target="_blank">AWS WAF Logging (Kinesis Firehose / S3 / CloudWatch Logs)</a> in voor analyse van valse positieven en optimalisatie van regels.
Voeg links toe naar het <span class="font-bold">Privacybeleid</span> en de <span class="font-bold">Gebruiksvoorwaarden</span>. Dit is belangrijk voor transparantie en naleving van beveiligingseisen en verwachtingen van gebruikers.
Conclusie

Als je een website in beheer krijgt waarop al een captcha of een ander beveiligingssysteem is geïnstalleerd en je geen toegang hebt tot de code, is dat geen probleem! Het is vrij eenvoudig te bepalen welke technologie precies wordt gebruikt. Voor het controleren of alles correct werkt, kun je de herkenningsservice CapMonster Cloud in een geïsoleerde testomgeving gebruiken, zodat je zeker weet dat het tokenverwerkingsmechanisme en de validatielogica correct functioneren.

In het geval van Amazon AWS WAF is het voldoende om het systeem te herkennen, het gedrag te analyseren en te bevestigen dat de beveiliging correct werkt. In het artikel hebben we laten zien hoe je Amazon AWS WAF kunt herkennen en waar je instructies vindt om het te koppelen of opnieuw te configureren, zodat je de bescherming met vertrouwen kunt onderhouden en de werking onder controle kunt houden.

Conclusion
Handige links
DocIconAWS WAF DocumentatieDocIconCapMonster Cloud Documentatie (werken met AWS WAF)DocIconOverzicht van webresource-bescherming met AWS WAF

Veelgestelde vragen over Amazon AWS WAF

De waarden websiteKey, context en iv komen van de AWS WAF-challengepagina en kunnen worden geëxtraheerd uit de HTML van die pagina of via JavaScript uit window.gokuProps.key, window.gokuProps.context en window.gokuProps.iv. U kunt ze automatisch extraheren met onze kant-en-klare scripts.

Dit zijn sessiegerelateerde parameters van de huidige challengepagina, geen generieke statische waarden om opnieuw te gebruiken tussen pogingen.

Het booleaanse veld cookieSolution bepaalt het formaat van de AWS WAF-oplossing die CapMonster Cloud retourneert:

  • false — het antwoord bevat captcha_voucher en existing_token
  • true — de oplossing bevat cookies met de kant-en-klare aws-waf-token

Voor browserautomatisering zoals Playwright, Puppeteer en Selenium is cookieSolution: true meestal de handigste optie, omdat het kant-en-klare cookies retourneert die direct aan de browsersessie kunnen worden toegevoegd.

Standaard hoeft u geen eigen proxies te leveren voor AWS WAF-taken, omdat CapMonster Cloud ingebouwde proxies gebruikt en hun kosten al in de service zijn opgenomen.

U moet echter eigen proxies opgeven wanneer de doelwebsite de token niet accepteert of wanneer de toegang tot ingebouwde services beperkt is. Als u een proxy met IP-autorisatie gebruikt, zorg er dan voor dat het adres 65.21.190.34 op de whitelist staat.

Een geldige AWS WAF-token omzeilt niet automatisch de rest van de Web ACL-logica. AWS stelt dat wanneer een verzoek een geldige token heeft voor een CAPTCHA- of Challenge-regel, die regel vergelijkbaar wordt behandeld met de Count-actie en AWS WAF doorgaat met het evalueren van het verzoek tegen de overige regels in de Web ACL. Dat betekent dat Bot Control, rate-based rules en andere regels geautomatiseerd verkeer nog steeds kunnen beïnvloeden, en AWS documenteert false-positive scenario's voor Bot Control apart.

In de praktijk moet probleemoplossing zich richten op regelvolgorde, regelprioriteit, tokeninstellingen en mogelijke false positives, in plaats van aan te nemen dat een opgeloste CAPTCHA op zichzelf doorgang garandeert.

Herhaalde AWS WAF-challenges treden meestal op wanneer de token is verlopen, de aws-waf-token-cookie ontbreekt of verouderd is, de sessie-immuniteitstijd is afgelopen of token-deling niet is geconfigureerd voor multi-domain flows.

Voor website-ontwikkelaars: Stel de CAPTCHA- of Challenge-immuniteitstijd af op het werkelijke gebruikersgedrag, configureer een token-domeinlijst voor gerelateerde domeinen, controleer of de AWS WAF JavaScript-integratie de token correct opslaat, en zorg ervoor dat strengere Web ACL-regels legitiem verkeer niet blijven blokkeren nadat CAPTCHA is opgelost.

Voor CapMonster Cloud-gebruikers: Gebruik verse taakgegevens van de doelpagina, geef het resultaat door in het vereiste formaat via de aws-waf-token-cookie of de header x-aws-waf-token, en maak een nieuwe taak met bijgewerkte parameters in plaats van een oude oplossing opnieuw te gebruiken als challenges doorgaan.