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.
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 :
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 :
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/142.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/142.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 :
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 :
É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 :
Étape 3. Créez un pack de protection (web ACL)
C'est l'ensemble des règles de protection pour votre ressource.
Étape 4. Configurez la catégorie de l'application :
Dans le bloc Tell us about your app :
Ces paramètres sont nécessaires pour qu'AWS propose des règles optimales.
Étape 5. Sélectionnez les ressources à protéger
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 :Cliquez sur Next.
Étape 7. Configuration (optionnel)
Sur l'écran Customize protection pack (web ACL) :
Paramètres principaux :
Journalisation (Logging)
Choisissez où écrire les journaux :
(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 :
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.
Dans la section Rule groups, vous pouvez ajouter :
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.