XSS stockée : la charge qui persiste
9 min · Débutant · 7 août 2026
Une charge qui n’a plus besoin de lien piégé
Le chapitre précédent montrait une charge qui n’existe que le temps d’une requête. Une XSS stockée change ce point précis : la charge est enregistrée quelque part côté serveur (une base de données, un fichier), puis renvoyée à chaque visiteur qui charge la page concernée, sans qu’aucune action individuelle ne soit nécessaire au-delà de la visite elle-même.
Des points d’entrée très communs
N’importe quel contenu saisi par un utilisateur et réaffiché plus tard à d’autres est un candidat : un commentaire, un avis produit, un nom de profil, un message dans un forum.
1. L'attaquant poste un commentaire contenant une charge XSS
2. Le serveur enregistre ce commentaire tel quel, sans l'échapper
3. Chaque visiteur qui affiche la page reçoit la charge dans le HTML
4. Le navigateur de chaque visiteur exécute la charge automatiquement Danger
Une XSS stockée sur une page très visitée touche potentiellement des milliers d’utilisateurs avant même d’être détectée, contrairement à une XSS réfléchie qui ne touche qu’une victime à la fois.
La démonstration
Le bac à sable ci-dessous simule un commentaire déjà enregistré en base de données, affiché à l’ouverture de la page, exactement comme le ferait une vraie section de commentaires :
<!-- HTML -->
<h3>Commentaires</h3><div id="commentaires"></div>
// JS
// Simule un commentaire deja enregistre en base de donnees,
// servi a TOUS les visiteurs de la page au chargement
const commentaireStocke = "Super article ! <img src=x onerror=\"console.log('XSS stockee executee')\">";
document.getElementById('commentaires').innerHTML = commentaireStocke; Contrairement à la démonstration du chapitre précédent, il n’y a ici aucune notion de lien à cliquer : la charge s’exécute dès que la page se charge, pour n’importe quel visiteur.