Caractéristique | XSS Réfléchi (Reflected) |
XSS Stocké (Stored) |
XSS DOM‑based (Client‑side) |
---|---|---|---|
Source du payload | Paramètre URL (query string) | Base de données / stockage serveur (commentaires, profils…) | Fragment d’URL (location.hash ), localStorage, etc. qui n'est pas envoyé au serveur mais uniquement chargé en local |
Implication du serveur | Renvoie et « réfléchit » directement le payload | Stocke et distribue le payload à chaque chargement | Ne voit pas le payload – page servie « propre » |
Mécanisme d’injection |
innerHTML ou insertion directe du paramètre non échappé
|
Lecture du contenu stocké et injection dans le HTML sans échappement |
Script client lit location.hash , tout ce qui suit “#” ajouré à l'URL du site, et injecte via innerHTML
|
Moment d’exécution | Au clic sur le lien piégé | À chaque affichage de la page | Au chargement / interaction côté client |
Persistance | Temporaire : nécessite un nouveau clic | Persistant tant que stocké en base | Temporaire : vit dans l’URL/hash ou session |
Exemple typique | Chaîne de requête ajoutée à l'URL du site
?q=<script>alert(1)</script>
|
Commentaire blog :
<script>alert('XSS')</script>
|
URL :
#<img src=x onerror=alert(1)>
|
Prévention | Échap. des query params, validation serveur, CSP | Échap./sanitization, validation, CSP |
Assainir tout usage de location.* , CSP
|
Entrez un commentaire (HTML/JS autorisé car non échappé) par exemple <script>alert('XSS attack')</script>
et envoyez. Le script malveillant est enregistré une fois sur le serveur puis il est servi pour toutes les requêtes utilisateurs qui suivront.
Cliquez ici pour insérer un diagramme non désiré dans la page.