Qu’est-ce que le XSS (Cross-Site Scripting) ?
Le Cross-Site Scripting, ou XSS, est une faille de sécurité dans les sites web qui permet aux attaquants d’ajouter des scripts nuisibles aux pages web. La plupart du temps, ces scripts sont écrits en JavaScript.
Si quelqu’un visite une page affectée par le XSS, son navigateur exécute le script de l’attaquant. Cela peut entraîner le vol de cookies, la prise de contrôle de sessions ou des actions effectuées sans la permission de l’utilisateur.
Le XSS, comme l’injection SQL, est régulièrement listé dans le OWASP Top 10 comme l’une des vulnérabilités les plus courantes des applications web.

Comment fonctionne le XSS ?
Le XSS cible souvent les applications web qui ne vérifient pas correctement et ne nettoient pas les entrées utilisateur.
Par exemple, si une boîte de commentaire permet du HTML brut ou du JavaScript sans aucun filtrage, un attaquant pourrait ajouter du code comme celui-ci :
<script>alert('Piraté !');</script>
Lorsque les victimes consultent la page, le code malveillant s’exécute dans leur navigateur.
Pourquoi le XSS est important en cybersécurité
Le XSS peut conduire à une violation plus importante :
- Prise de contrôle de compte (vol de cookies de session pour usurper l’identité des utilisateurs)
- Vol de données (capture des entrées de formulaire comme les mots de passe ou les cartes de crédit)
- Attaques de phishing (injection de faux formulaires de connexion)
- Distribution de logiciels malveillants (redirection des utilisateurs vers des sites web malveillants)
Types de XSS
- XSS basé sur le DOM
- L’attaque se produit entièrement dans le navigateur en manipulant le Document Object Model (DOM) sans impliquer le serveur.
- XSS stocké
- Le script malveillant est stocké de manière permanente sur le serveur, comme dans la base de données ou la page de profil.
- XSS réfléchi
- Le script est réfléchi par un serveur web (par exemple, dans l’URL ou le message d’erreur), le script sera exécuté lorsque la victime clique sur le lien conçu par les attaquants.
Comment prévenir le XSS
- Assainissement des entrées et encodage des sorties : toujours nettoyer les données d’entrée utilisateur avant de les traiter, transformer les entrées utilisateur en un format sûr
- Utiliser la politique de sécurité de contenu (CSP) : restreint les scripts pouvant être exécutés dans le navigateur.
- Éviter eval() et JavaScript en ligne : pour réduire les risques d’injection.
- Tests de sécurité (DAST/IAST) : effectuer des tests de sécurité pour détecter les vulnérabilités tôt
Exemple dans un cas réel - Ver Samy (MySpace, 2005)
Ce qui s’est passé : Samy Kamkar a publié un profil MySpace contenant une charge utile XSS stockée. Lorsque d’autres utilisateurs ont consulté le profil, la charge utile s’est exécutée dans leurs navigateurs, elle (a) a ajouté Samy comme ami, (b) a ajouté la phrase “Samy est mon héros” à leurs profils, et (c) s’est répliquée sur les pages de profil de ces utilisateurs.
Impact : Le ver s’est auto-propagé à ~1 million d’utilisateurs en ~20 heures, forçant MySpace à être temporairement hors ligne.
Pourquoi cela a fonctionné : MySpace a permis l’exécution de scripts non échappés dans les champs de profil, permettant l’exécution de scripts stockés dans les navigateurs des visiteurs.
Leçons / correction : Encodage de sortie approprié, assainissement des entrées, suppression du HTML dans les champs de profil, et correction rapide. Samy a ensuite fait face à des conséquences légales, et MySpace a déployé des filtres.
Termes associés
- Injection SQL
- DAST (Test de sécurité des applications dynamiques)
- OWASP Top 10
- CSRF (Cross-Site Request Forgery)