
Un programme pour tester les fonctionnalités WAF
Outil d'évaluation WAF pour entreprise — Des charges d'attaque réelles. Des résultats réels. Des rapports prêts pour la conformité.
Le Testeur WAF évalue les pare-feu d'application web en envoyant des charges d'attaque réelles à une URL fournie par l'utilisateur et en signalant si elles sont bloquées. Disponible sous forme d'application de bureau Windows (Electron) et d'une CLI Python qui fonctionne partout.

Cet outil est destiné uniquement aux tests de sécurité autorisés. Utilisez-le uniquement contre des systèmes que vous possédez ou pour lesquels vous avez une autorisation écrite explicite. Les tests non autorisés de systèmes tiers peuvent violer le Computer Fraud and Abuse Act (CFAA) et les lois équivalentes dans votre juridiction. Les auteurs déclinent toute responsabilité en cas d'utilisation abusive.
| Suite | Tests | Ce qu'elle couvre |
|---|---|---|
| OWASP / CWE Core | 44 | Injection SQL (12 variantes), XSS (10 variantes), traversée de chemin, injection de commande, XXE, SSRF, Log4Shell, SSTI, redirection ouverte |
| Rate Limiting | 3 | Rafale de requêtes (30 simultanées), rafale séquentielle, contournement par rotation IP via X-Forwarded-For |
| Bot Detection | 10 | sqlmap, Nikto, Nmap, Scrapy, Masscan, HeadlessChrome, python-requests, curl, UA vide, en-têtes Accept manquants |
| Bypass Attempts | 15 | Double encodage URL, Unicode pleine largeur, octets nuls, variation de casse, obfuscation par commentaire, injection CRLF, injection d'en-tête Host, substitution de méthode, astuces de chemin |
| API Security | 10 | Introspection / lot / énumération GraphQL, algorithme « none » et confusion d'algorithme JWT, affectation en masse, altération de verbe HTTP, BOLA, confusion de type de contenu |
| Business Logic | 8 | Quantité négative, soumission à prix zéro, accès à des points de terminaison admin, pollution de paramètres HTTP, énumération de comptes, exposition excessive de données, navigation forcée, escalade de privilèges |
Chaque test est étiqueté avec un ou plusieurs cadres de conformité :
ÉLEVÉ, PROBABLE ou INCERTAIN plutôt que binaires (réussi/échoué)git clone https://github.com/kpomin57/waf-tester.git
cd waf-tester
npm install
npm start
npm run build
La sortie apparaît dans dist/ sous forme d'un installateur NSIS et d'un .exe portable. Aucun prérequis nécessaire sur la machine cible — Electron intègre son propre runtime.
Une version Python en un seul fichier qui fonctionne partout où Python est disponible — serveurs Linux, pipelines CI/CD, conteneurs Docker, WSL ou tout environnement où le .exe Windows n'est pas une option.
pip install rich requests
python waf_tester.py --url https://target.example.com
Exécute les 90 tests, demande une confirmation d'autorisation, affiche les résultats en couleur dans le terminal et enregistre un rapport JSON et HTML dans le répertoire courant.
| Option | Description | Par défaut |
|---|---|---|
--url | URL cible (obligatoire) | — |
--suites | Suites à exécuter, séparées par des virgules | toutes |
--auth-type | none / bearer / apikey / cookie / basic | none |
--auth-value | Jeton, chaîne de cookie, ou valeur de clé API | — |
--auth-header | Nom de l'en-tête pour l'authentification par clé API | X-API-Key |
--auth-user | Nom d'utilisateur pour l'authentification de base | — |
--auth-pass | Mot de passe pour l'authentification de base | — |
--no-baseline | Désactiver la comparaison de référence | désactivé |
--no-rotate-ua | Désactiver la rotation du User-Agent | désactivé |
--waf-header | Envoyer l'en-tête d'identification X-WAF-Tester | désactivé |
--output | terminal, json, html (séparés par des virgules) | les trois |
--output-dir | Répertoire pour enregistrer les fichiers de rapport | . |
--timeout | Délai d'attente par requête en secondes | 10 |
--proxy | URL du proxy pour toutes les requêtes (ex. http://127.0.0.1:8080) | désactivé |
--confirm | Ignorer la demande de confirmation d'autorisation | désactivé |
# Exécuter toutes les suites
python waf_tester.py --url https://app.example.com
# Exécuter uniquement les suites OWASP et API
python waf_tester.py --url https://app.example.com --suites owasp,api
# Authentification par jeton Bearer
python waf_tester.py --url https://app.example.com/api \
--auth-type bearer --auth-value eyJhbGciOiJIUzI1NiJ9...
# Authentification par clé API
python waf_tester.py --url https://app.example.com/api \
--auth-type apikey --auth-header X-API-Key --auth-value mykey123
# Enregistrer les rapports dans un dossier, ignorer la confirmation (CI/CD)
python waf_tester.py --url https://app.example.com \
--output-dir ./reports --confirm
# Sortie terminal uniquement — aucun fichier enregistré
python waf_tester.py --url https://app.example.com --output terminal
# Acheminer le trafic via Burp Suite
python waf_tester.py --url https://app.example.com --proxy http://127.0.0.1:8080
docker run --rm -v $(pwd)/reports:/reports \
python:3.12-slim sh -c \
"pip install rich requests -q && python waf_tester.py \
--url https://target.example.com \
--output-dir /reports --confirm"
- name: Évaluation WAF
run: |
pip install rich requests
python waf_tester.py \
--url ${{ secrets.WAF_TARGET_URL }} \
--suites owasp,api,bypass \
--output json \
--output-dir ./reports \
--confirm
- name: Téléversement du rapport
uses: actions/upload-artifact@v3
with:
name: waf-report
path: reports/
La CLI Python peut acheminer tout le trafic de test via Burp Suite, vous donnant un historique HTTP complet de chaque charge utile envoyée par le Testeur WAF. Ceci est utile pour l'inspection manuelle des requêtes et réponses, le réglage fin des charges utiles, le dépannage des comportements inattendus du WAF, et l'utilisation du scanner ou du Repeater de Burp sur des résultats intéressants.
Burp Suite exécute un écouteur proxy local (par défaut 127.0.0.1:8080). Lorsque vous pointez les variables d'environnement proxy du Testeur WAF vers cette adresse, chaque requête que l'outil envoie passe par Burp avant d'atteindre la cible. Vous voyez chaque charge utile dans l'historique HTTP de Burp avec la requête et la réponse complètes — code d'état, en-têtes, corps — exactement comme le WAF l'a vue.