Partie 7 — XSS & sécurité côté client
⏱️ TL;DR — Le XSS (Cross-Site Scripting) est l’injection côté navigateur : une entrée non fiable se retrouve exécutée comme du JavaScript dans la page d’une victime. C’est grave, car ce script tourne dans l’origine du site (il contourne la Same-Origin Policy — Partie 2) : il peut voler la session (si le cookie n’est pas
HttpOnly), agir au nom de l’utilisateur, exfiltrer des données, défigurer la page. Cette partie couvre les trois types (stored, reflected, DOM-based), la parade principale — l’encodage de sortie contextuel et la sanitization du HTML riche (DOMPurify) —, ce que font (et ne font pas) les frameworks comme React, et le filet CSP / Trusted Types.
Le problème qu’on résout
Le XSS est le pendant navigateur de l’injection SQL : au lieu d’une entrée qui devient du code SQL sur le serveur, c’est une entrée qui devient du code JavaScript dans le navigateur d’un autre utilisateur. Le mécanisme est le même (donnée traitée comme code, faute de séparation) ; les conséquences aussi sont majeures, car un script injecté hérite de tous les droits de l’utilisateur dans le site : sa session, ses actions, ses données.
C’est l’une des failles les plus répandues du web, précisément parce que afficher une donnée est l’opération la plus banale qui soit — et qu’il suffit de l’afficher au mauvais endroit sans l’encoder pour ouvrir la faille. Cette partie t’apprend à afficher n’importe quelle donnée sans jamais lui laisser devenir du code.
Ce que tu sauras faire à la fin de cette partie
- Distinguer les trois types de XSS (stored, reflected, DOM-based) et leurs vecteurs.
- Appliquer la parade centrale : l’encodage de sortie contextuel (HTML, attribut, JS, URL).
- Sanitizer du HTML riche autorisé (contenu de cours, commentaires formatés) avec DOMPurify.
- Savoir ce que React/Vue/Twig échappent automatiquement, et par où le XSS repasse (
dangerouslySetInnerHTML,v-html,|raw,href). - Déployer une CSP et comprendre les Trusted Types comme filet contre le DOM-XSS.
Les chapitres
| # | Chapitre | En un mot |
|---|---|---|
| 7.1 | XSS : les trois types | Stored, reflected, DOM-based ; mécanisme et impact. |
| 7.2 | Encodage & sanitization | Encodage contextuel de sortie, DOMPurify pour le HTML riche. |
| 7.3 | React, Vue & les frameworks | Auto-échappement, et les portes qui rouvrent le XSS. |
| 7.4 | CSP & Trusted Types | Le filet : politique de contenu, nonces, Trusted Types. |
Le XSS relève de l’injection passive (le script s’exécute chez la victime). Le chapitre suivant traite les attaques qui forcent des requêtes au nom de la victime ou du serveur : la Partie 8 — CSRF, SSRF & CORS.
On commence par le mécanisme et ses variantes : XSS : les trois types.