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.
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:
In het verzoek om AWS WAF op te lossen, moeten de volgende parameters worden opgegeven:
type - AmazonTask;
websiteURL - adres van de hoofdpagina waar de captcha wordt opgelost;
challengeScript - link naar challenge.js;
De volgende parameters worden uit window.gokuProps gehaald (allemaal van het type string):
captchaScript - link naar captcha.js (kan ontbreken als u alleen een Challenge heeft);
cookieSolution - standaard false — als antwoord ontvangt u "captcha_voucher" en "existing_token". Als u "aws-waf-token" cookies nodig heeft, geef dan true op.;
userAgent - User-Agent van de browser. Geef alleen een actuele UA van Windows OS door;
Ook is voor deze taak het gebruik van uw proxy's vereist:
proxyType :
- http - gewone HTTP/HTTPS-proxy;
- https - probeer deze optie als «http» niet werkt (vereist voor sommige aangepaste proxy's);
- socks4 - proxy van het type SOCKS4;
- socks5 - proxy van het type SOCKS5;
proxyAddress - IP-adres van de proxy IPv4/IPv6;
proxyPort - proxy-poort;
proxyLogin - gebruikersnaam proxy-server;
proxyPassword - wachtwoord proxy-server.
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"
}
}De gegevens die van CapMonster Cloud zijn ontvangen (geldige AWS WAF-cookies) kunnen in de browsercontext of HTTP-client worden geplaatst. Hierna beschouwt de site het verzoek als geverifieerd en kunt u doorgaan met werken zonder extra controles of challenge-pagina's.
Voor automatisering en testen is het handig om Puppeteer, Selenium of Playwright te gebruiken — hiermee kunt u:
- de door AWS WAF beschermde pagina openen;
- de ontvangen cookies toevoegen aan de browsercontext;
- de pagina vernieuwen met een geldige verificatie;
- verdere acties uitvoeren (formulieren verzenden, naar pagina's navigeren, functionaliteit testen).
Zo kan de correcte werking van de bescherming worden gecontroleerd en kunt u er zeker van zijn dat de site geldige AWS WAF-cookies correct accepteert en verwerkt.
Belangrijk: deze codevoorbeelden gebruiken cookieSolution=False. Als u als resultaat cookies moet ontvangen, stel dan cookieSolution=True in.
// 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();
})();
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:
- Ga naar de AWS Console
- 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.
- Selecteer in het menu links: Resources & protection packs (Web ACLs)
- 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
- Klik op Add resources
- Kies wat u verbindt:
Als uw site op CloudFront staat > kies CloudFront distributions
Als uw backend op ALB staat > kies Regional resourcesAls API > kies API Gateway REST APIVink 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:
- Open WAF > selecteer uw web ACL
- Ga naar Monitoring
- Bekijk:
- verkeersgrafieken
- geblokkeerde verzoeken
- voorbeeldverzoeken (sample requests)
- 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).
Ondersteunde captchas
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.