Amazon AWS WAF
et CapMonster Cloud

Résolution de captcha, installation sur le site et tests.

Tarifs de la solution Amazon AWS WAF

CAPTCHA
Prix (USD)
$ 1.40
1000 jetons
Vous avez hérité d’un site doté d’une captcha ou d’une autre couche de protection mais sans accès au code source ? Il est alors naturel de se demander quelle solution est installée, si elle est correctement configurée et comment la tester.

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.

Qu'est-ce que AWS WAF d'Amazon
Qu'est-ce que AWS WAF d'Amazon

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 :

Création de la tâcheCréation de la tâche
arrow
Envoyer une requête APIEnvoyer une requête API
arrow
Réception du résultatRéception du résultat
arrow
Substitution des cookies aws-waf-token sur la pageSubstitution des cookies aws-waf-token sur la page
arrow
Reconnaissance d'Amazon AWS WAF à l'aide de bibliothèques prêtes à l'emploi
Le service CapMonster Cloud fournit des bibliothèques prêtes à l'emploi pour travailler confortablement dans les langages Python, JavaScript (Node.js) et C#.

Important : ces exemples de code utilisent cookieSolution=False. Si vous devez obtenir des cookies en résultat, définissez cookieSolution=True.

Python
JavaScript
C#
Résolution, obtention des paramètres et définition des cookies
Exemple en Node.js pour le cycle complet de reconnaissance de captcha sur votre page web. Approches possibles : utiliser des requêtes HTTP pour obtenir le HTML et les paramètres du système de protection, envoyer la réponse et traiter le résultat. Ou à l'aide d'outils d'automatisation (par exemple Playwright) — ouvrir la page, attendre la vérification, envoyer les paramètres via le client CapMonster Cloud, obtenir le résultat, insérer les cookies dans le navigateur (pour les tests, vous pouvez utiliser des données correctes ou incorrectes) et voir le résultat.
python
// 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();
})();
Comment connecter AWS WAF à votre site
Pour vous orienter avec confiance dans le fonctionnement du captcha sur votre site, comprendre la logique de sa vérification, le reconnecter ou le reconfigurer, nous vous recommandons d'étudier cette section. Elle décrit le processus de connexion de la protection — cela vous aidera à comprendre rapidement toutes les nuances.

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 :

  1. Allez dans la console AWS
  2. 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.

  1. Dans le menu de gauche, sélectionnez : Resources & protection packs (Web ACLs)
  2. 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

  1. Cliquez sur Add resources
  2. Choisissez ce que vous connectez :

Si votre site est sur CloudFront > sélectionnez CloudFront distributions
Si votre backend est sur ALB > sélectionnez Regional resources
Si API > sélectionnez API Gateway REST API
Cochez 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 :

  1. Ouvrez WAF > sélectionnez votre web ACL
  2. Allez dans Monitoring
  3. Regardez :
    • les graphiques de trafic
    • les requêtes bloquées
    • les exemples de requêtes (sample requests)

Supplémentaire (facultatif)

  • 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).

Background
Erreurs possibles et débogage
Bug Icon
Domaine ou règle invalide — Le Challenge ne s'affiche pas
Vérifiez que l'AWS WAF WebACL est lié au bon domaine (CloudFront Distribution / ALB / API Gateway), au bon chemin et qu'il n'y a pas de conflits entre les règles.
Bug Icon
Délai d'attente lors du chargement de la page ou de la vérification
Parfois, le navigateur ou le script n'attend pas la réponse d'AWS WAF. Augmentez les délais d'attente (timeouts) dans les tests et assurez-vous que le backend traite les requêtes sans délai.
Bug Icon
Cookies AWS WAF expirés
Les _aws_waf_token_… obsolètes ou les étiquettes de cookies associées entraînent un Challenge répété ou un blocage temporaire.
Bug Icon
Règles excessivement sensibles
Des signatures Bot Control trop strictes, des règles CAPTCHA ou des règles basées sur le débit (Rate-based) peuvent bloquer de vrais utilisateurs.
Bug Icon
Configuration incorrecte de la WebACL
Des erreurs dans l'ordre des règles, les priorités ou les conditions peuvent entraîner des faux positifs et des blocages.
Tests de robustesse de la protection
Après l’intégration, vérifiez que le système protège réellement le site contre les actions automatisées.
Conseils de sécurité et d’optimisation
Configurez la WebACL selon le niveau de risque. Utilisez des Managed Rules (AWS, AWS Marketplace), AWS Bot Control et des règles personnalisées basées sur la réputation IP, les en-têtes, la limitation de débit et d'autres conditions.
Journalisez les événements WAF. Activez <a href="https://docs.aws.amazon.com/waf/latest/developerguide/logging.html" target="_blank">AWS WAF Logging (Kinesis Firehose / S3 / CloudWatch Logs)</a> pour l'analyse des faux positifs et l'optimisation des règles.
Ajoutez des liens vers la <span class="font-bold">Politique de confidentialité</span> et les <span class="font-bold">Conditions d'utilisation</span>. C'est important pour la transparence et la conformité aux exigences de sécurité et aux attentes des utilisateurs.
Conclusion

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.

Conclusion
Liens utiles
DocIconDocumentation AWS WAFDocIconDocumentation CapMonster Cloud (travail avec AWS WAF)DocIconAperçu de la protection des ressources web avec AWS WAF

Questions fréquentes sur Amazon AWS WAF

Les valeurs websiteKey, context et iv proviennent de la page de challenge AWS WAF et peuvent être extraites soit du HTML de cette page, soit via JavaScript depuis window.gokuProps.key, window.gokuProps.context et window.gokuProps.iv. Vous pouvez les extraire automatiquement à l'aide de nos scripts prêts à l'emploi.

Il s'agit de paramètres liés à la session de la page de challenge actuelle, et non de valeurs statiques génériques à réutiliser entre les tentatives.

Le champ booléen cookieSolution contrôle le format de la solution AWS WAF renvoyée par CapMonster Cloud :

  • false — la réponse contient captcha_voucher et existing_token
  • true — la solution inclut des cookies avec le aws-waf-token prêt à l'emploi

Pour les flux d'automatisation de navigateur tels que Playwright, Puppeteer et Selenium, cookieSolution: true est généralement l'option la plus pratique, car elle renvoie des cookies prêts à l'emploi qui peuvent être ajoutés directement à la session du navigateur.

Par défaut, vous n'avez pas besoin de fournir vos propres proxys pour les tâches AWS WAF, car CapMonster Cloud utilise des proxys intégrés dont le coût est déjà inclus dans le service.

Cependant, vous devez spécifier vos propres proxys lorsque le site cible n'accepte pas le token ou lorsque l'accès aux services intégrés est restreint. Si vous utilisez un proxy avec autorisation par IP, assurez-vous d'autoriser l'adresse 65.21.190.34.

Un token AWS WAF valide ne contourne pas automatiquement le reste de la logique Web ACL. AWS indique que lorsqu'une requête possède un token valide pour une règle CAPTCHA ou Challenge, cette règle est traitée de manière similaire à l'action Count, puis AWS WAF continue d'évaluer la requête par rapport aux règles restantes de la Web ACL. Cela signifie que Bot Control, rate-based rules et d'autres règles peuvent encore affecter le trafic automatisé, et AWS documente séparément les scénarios de faux positifs pour Bot Control.

En pratique, le dépannage doit se concentrer sur l'ordre des règles, leur priorité, les paramètres du token et les éventuels faux positifs, plutôt que de supposer qu'une CAPTCHA résolue garantit à elle seule le passage.

Les challenges AWS WAF répétés surviennent généralement lorsque le token a expiré, le cookie aws-waf-token est absent ou obsolète, le temps d'immunité de la session est terminé, ou le partage de token n'est pas configuré pour les flux multi-domaines.

Pour les développeurs de sites web : Définissez le temps d'immunité CAPTCHA ou Challenge en fonction du comportement réel des utilisateurs, configurez une liste de domaines de token pour les domaines associés, vérifiez que l'intégration JavaScript AWS WAF stocke correctement le token, et assurez-vous que des règles Web ACL plus strictes ne continuent pas à bloquer le trafic légitime après la résolution de la CAPTCHA.

Pour les utilisateurs de CapMonster Cloud : Utilisez des données de tâche fraîches de la page cible, transmettez le résultat au format requis via le cookie aws-waf-token ou l'en-tête x-aws-waf-token, et créez une nouvelle tâche avec des paramètres mis à jour au lieu de réutiliser une ancienne solution si les challenges persistent.