Dans cet article, nous avons essayé de répondre à toutes les questions essentielles. Pour commencer à résoudre le problème, il faut d’abord déterminer quel système de protection est utilisé. Pour cela, vous pouvez consulter la liste des captchas et systèmes de protection antibot les plus populaires, qui présente des exemples visuels et des caractéristiques clés permettant d’identifier rapidement avec quoi vous avez affaire.
Si vous constatez que votre site utilise Amazon AWS WAF, l’étape suivante consiste à étudier plus en détail ses propriétés et son fonctionnement. Dans cet article, vous pouvez également consulter le guide d’intégration de Amazon AWS WAF afin de comprendre pleinement la façon dont il fonctionne sur votre site. Cela vous permettra non seulement de mieux connaître la protection en place, mais aussi de planifier correctement sa maintenance.
AWS WAF (Amazon Web Services Web Application Firewall) est un pare-feu d'application web cloud d'Amazon qui protège les sites, les API et les applications web contre les attaques et le trafic malveillant. En termes simples, c'est un filtre placé devant votre site ou votre API qui décide quel trafic de visiteurs laisser passer et quel trafic bloquer.
Si le Challenge/CAPTCHA est activé sur le site, le visiteur peut voir une page de vérification distincte. Il lui sera demandé d'effectuer une tâche, par exemple sélectionner toutes les images d'une catégorie, pour confirmer qu'il n'est pas un robot.
Comment résoudre AWS WAF via CapMonster Cloud
Lors du test de ressources protégées par AWS WAF, il est important de s'assurer que la protection fonctionne correctement et qu'elle est bien intégrée.
Vous pouvez vérifier manuellement le fonctionnement de la protection :
- Ouvrez la page avec le formulaire ou la ressource et assurez-vous qu'AWS WAF réagit correctement aux requêtes.
- Essayez d'effectuer des actions qui pourraient être limitées par le WAF (par exemple, des requêtes massives, des en-têtes suspects) — le serveur doit bloquer ces requêtes ou renvoyer une erreur.
Après avoir réussi la vérification, AWS WAF définit des cookies qui confirment que l'utilisateur ou le client a passé le contrôle et que le trafic de confiance est autorisé.
Pour la reconnaissance automatique de captcha, vous pouvez utiliser des services spécialisés, par exemple CapMonster Cloud — un outil qui accepte les paramètres du captcha, les traite sur ses serveurs et renvoie des cookies ou un jeton prêts à l'emploi. Ils peuvent être insérés dans le navigateur pour passer la vérification sans intervention de l'utilisateur.
Travailler avec CapMonster Cloud via l’API comprend généralement les étapes suivantes :
Dans la requête pour résoudre AWS WAF, il est nécessaire d'indiquer les paramètres suivants :
type - AmazonTask;
websiteURL - adresse de la page principale où le captcha est résolu;
challengeScript - lien vers challenge.js;
Les paramètres suivants sont extraits de window.gokuProps (tous sont de type chaîne de caractères) :
captchaScript - lien vers captcha.js (peut être absent si vous avez simplement un Challenge);
cookieSolution - par défaut false — en réponse, vous recevrez "captcha_voucher" et "existing_token". Si vous avez besoin des cookies "aws-waf-token", indiquez true.;
userAgent - User-Agent du navigateur. Transmettez uniquement un UA actuel du système d'exploitation Windows;
Pour cette tâche, l'utilisation de vos proxys est également nécessaire :
proxyType :
- http - proxy HTTP/HTTPS ordinaire;
- https - essayez cette option si « http » ne fonctionne pas (nécessaire pour certains proxys personnalisés);
- socks4 - proxy de type SOCKS4;
- socks5 - proxy de type SOCKS5;
proxyAddress - Adresse IP du proxy IPv4/IPv6;
proxyPort - port du proxy;
proxyLogin - identifiant du serveur proxy;
proxyPassword - mot de passe du serveur proxy.
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"
}
}Les données reçues de CapMonster Cloud (cookies AWS WAF valides) peuvent être insérées dans le contexte du navigateur ou du client HTTP. Après cela, le site perçoit la requête comme vérifiée et permet de continuer à travailler sans vérifications supplémentaires ni pages de challenge.
Pour l'automatisation et les tests, il est pratique d'utiliser Puppeteer, Selenium ou Playwright — ils permettent de :
- ouvrir la page protégée par AWS WAF ;
- ajouter les cookies reçus au contexte du navigateur ;
- actualiser la page avec la vérification valide ;
- effectuer des actions ultérieures (envoyer des formulaires, naviguer sur les pages, tester les fonctionnalités).
Ainsi, on peut vérifier l'exactitude du fonctionnement de la protection et s'assurer que le site accepte et traite correctement les cookies AWS WAF valides.
Important : ces exemples de code utilisent cookieSolution=False. Si vous devez obtenir des cookies en résultat, définissez 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";
// Paramètres du proxy
const PROXY = {
proxyType: "http",
proxyAddress: "PROXY_HOST",
proxyPort: 1234,
proxyLogin: "PROXY_USER",
proxyPassword: "PROXY_PASS"
};
(async () => {
// 1) Ouvrir la page via proxy et collecter les paramètres 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" });
// attendre le chargement des scripts challenge et 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"));
});
// extraire les paramètres AWS WAF (clé, context, iv, liens vers les 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) Résoudre AWS WAF 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) Insérer aws-waf-token et nettoyer les anciens
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();
// nettoyage des anciens aws-waf-token pour votre domaine
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);
// définition du nouveau 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 ne peut pas être installé directement sur un site. Il fonctionne uniquement via des ressources AWS :
- Amazon CloudFront (l'option principale et la meilleure) — un CDN via lequel n'importe quel site peut être protégé. Fonctionne rapidement, globalement et convient à presque tous les cas.
- Application Load Balancer (ALB) — utilisé pour les sites côté serveur, les API et les conteneurs au sein d'AWS. Si votre backend fonctionne sur EC2, ECS, EKS — placez le WAF sur l'ALB.
- API Gateway — protection des API REST et WebSocket. Convient aux SPA, applications mobiles et microservicios.
- AWS AppSync (API GraphQL)
- Amazon Cognito (connexion/inscription)
- AWS App Runner (applications en conteneurs)
- AWS Amplify Hosting (hébergement frontend)
- AWS Verified Access (accès aux applications internes)
Étape 1. Créez un compte AWS (si vous n'en avez pas)
Allez sur : https://portal.aws.amazon.com/billing/signup. Créez un compte > confirmez l'e-mail et le téléphone.
Étape 2. Vous pouvez utiliser l'interface standard ou la nouvelle interface d'AWS WAF :
- Allez dans la console AWS
- Ouvrez AWS WAF. Dans le menu de gauche, cliquez sur Try the new experience (si proposé).
Étape 3. Créez un pack de protection (web ACL)
C'est l'ensemble des règles de protection pour votre ressource.
- Dans le menu de gauche, sélectionnez : Resources & protection packs (Web ACLs)
- Cliquez sur Add protection pack (web ACL).
Étape 4. Configurez la catégorie de l'application :
Dans le bloc Tell us about your app :
- App category — sélectionnez Web / API / Both
- Traffic source — d'où vient le trafic (web, API ou les deux)
Ces paramètres sont nécessaires pour qu'AWS propose des règles optimales.
Étape 5. Sélectionnez les ressources à protéger
- Cliquez sur Add resources
- Choisissez ce que vous connectez :
Si votre site est sur CloudFront > sélectionnez CloudFront distributions
Si votre backend est sur ALB > sélectionnez Regional resourcesSi API > sélectionnez API Gateway REST APICochez la case sur la ressource nécessaire > cliquez sur Add.
Étape 6. Sélectionnez un ensemble de règles de départ.
AWS proposera :
Recommended for you — la meilleure option pour les débutants
Il comprend :- protection de base
- règles contre les SQLi et XSS
- IP reputation lists (listes de réputation IP)
- Bot Control (optionnel)
- règles pour web/API
Cliquez sur Next.
Étape 7. Configuration (optionnel)
Sur l'écran Customize protection pack (web ACL) :
Paramètres principaux :
- Default action :
- Allow all except blocked — généralement choisi
- Block all except allowed — si le site est fermé
- Default rate limits : Limitation du nombre de requêtes (atténuation DDoS L7)
- IP addresses : Listes blanches/noires
- Country specific origins : Restriction du trafic par pays
Journalisation (Logging)
Choisissez où écrire les journaux :
- CloudWatch
- S3
- Firehose
(S3 + Athena est recommandé).
Étape 8. Créer la web ACL
Cliquez sur : Add protection pack (web ACL)
AWS créera les règles et les liera à votre ressource.
Vérification
Pour vous assurer que la protection fonctionne :
- Ouvrez WAF > sélectionnez votre web ACL
- Allez dans Monitoring
- Regardez :
- les graphiques de trafic
- les requêtes bloquées
- les exemples de requêtes (sample requests)
- Activer CAPTCHA ou Challenge
Dans n'importe quelle règle > Action > CAPTCHA / Challenge
Cela réduit le trafic de bots et protège les pages de connexion et de formulaires.
- Ajouter des Managed Rule Groups
Dans la section Rule groups, vous pouvez ajouter :
- AWS Managed
- Bot Control
- Account takeover prevention
- Marketplace rules (F5, Imperva, Fortinet)
- Lier avec Shield Advanced. Pour la protection contre les DDoS (L3–L7).
Captchas pris en charge
Si vous avez récupéré un site avec un captcha ou un autre système de protection déjà installé, mais sans accès au code, pas de panique ! Il est assez simple d’identifier quelle technologie est utilisée. Pour vérifier que tout fonctionne correctement, vous pouvez utiliser le service de reconnaissance CapMonster Cloud dans un environnement de test isolé, afin de vous assurer que le mécanisme de traitement des jetons et la logique de vérification fonctionnent correctement.
Dans le cas de Amazon AWS WAF, il suffit d’identifier le système, d’étudier son comportement et de vérifier que la protection fonctionne correctement. Dans cet article, nous avons montré comment reconnaître Amazon AWS WAF et où trouver les instructions pour son intégration ou sa reconfiguration, afin de maintenir la protection en toute confiance et de garder son fonctionnement sous contrôle.