Découvrez ce qu’est une faille XSS, comment elle fonctionne et les bonnes pratiques pour protéger efficacement vos applications web.


Quand ton site exécute du code… pour quelqu’un d’autre


Imagine un instant : 
un utilisateur écrit un commentaire sur ton site… et ce commentaire contient du JavaScript.


Si ton application ne filtre rien, le navigateur va exécuter ce code comme s’il venait de ton site.


Résultat possible :

  • vol de session
  • redirection vers un site malveillant
  • affichage de faux formulaires
  • vol de données


Bienvenue dans le monde des failles XSS.


Une faille XSS, c’est quoi exactement ?


XSS signifie Cross-Site Scripting.


C’est une vulnérabilité qui permet d’injecter du code JavaScript dans une page web consultée par d’autres utilisateurs.


Ce code s’exécute dans le navigateur de la victime, avec les permissions du site.


Donc pour le navigateur, le script est "de confiance".


Documentation OWASP : 
https://owasp.org/www-community/attacks/xss/


Les trois types principaux de XSS


1. XSS stockée (Stored XSS)


Le script est enregistré dans une base de données :

  • commentaires
  • profils utilisateurs
  • forums


Chaque visiteur exécute alors le script automatiquement.


C’est la plus dangereuse.


2. XSS réfléchie (Reflected XSS)


Le script est envoyé via une URL :


site.com/search?q=alert('hack')


Si la page affiche le contenu sans filtrage, le script s’exécute.


Souvent utilisée dans des attaques par phishing.


3. XSS DOM-based


Le script est exécuté directement dans le navigateur, via JavaScript.


Aucun passage par le serveur.


Plus discrète, mais redoutable.


Guide détaillé : 
https://portswigger.net/web-security/cross-site-scripting


Exemple simple de faille XSS


Supposons ce code PHP :


<?php
echo $_GET['comment'];
?>

Si un utilisateur écrit :


alert('XSS')


Le script s’exécute.


Et si au lieu d’une alerte, c’était un vol de cookie ?


Pourquoi les failles XSS sont si dangereuses


Une attaque XSS peut permettre :

  • vol de cookies de session
  • prise de contrôle de comptes
  • modification de pages
  • redirections malveillantes
  • keylogging


Et le pire :


l’utilisateur ne se doute de rien.


Comment se protéger efficacement


1. Échapper les données utilisateur


Toujours filtrer ce qui vient :

  • des formulaires
  • des URL
  • des cookies
  • des API


En PHP, on utilise :


<?php
echo htmlspecialchars($_GET['comment'], ENT_QUOTES, 'UTF-8');
?>

Documentation officielle : 
https://www.php.net/htmlspecialchars


2. Utiliser des headers de sécurité


Le header Content Security Policy (CSP) empêche l’exécution de scripts non autorisés.


Exemple :

header("Content-Security-Policy: default-src 'self'; script-src 'self'");


Guide CSP : 
https://developer.mozilla.org/fr/docs/Web/HTTP/CSP


3. Valider côté serveur, pas seulement côté client


Le JavaScript peut être contourné.


Le serveur, non.


Toujours valider et filtrer côté backend.


4. Éviter innerHTML en JavaScript


innerHTML peut exécuter du code.


Préférer :

  • textContent
  • createElement


Guide sécurité DOM : 
https://developer.mozilla.org/fr/docs/Web/API/Element/innerHTML


Bonnes pratiques générales


Un site sécurisé :

  • filtre toutes les entrées
  • échappe toutes les sorties
  • utilise HTTPS
  • protège les cookies
  • applique CSP


Ce sont des bases indispensables aujourd’hui.


Tester les failles XSS


Des outils existent pour tester la sécurité :


OWASP ZAP : 
https://www.zaproxy.org/


Burp Suite : 
https://portswigger.net/burp


Ces outils permettent de simuler des attaques pour corriger les failles avant les hackers.


Conclusion


Les failles XSS sont parmi les vulnérabilités web les plus courantes… et les plus sous-estimées.


Mais la bonne nouvelle, c’est qu’elles sont aussi parmi les plus faciles à éviter quand on applique les bonnes pratiques.


Filtrer. Échapper. Valider.


Trois mots qui peuvent sauver ton application.