Cross-Site Scripting (XSS)
Le Cross-Site Scripting (XSS) est une vulnérabilité de sécurité courante dans les applications Web permettant à un attaquant d'injecter du code malveillant (souvent du JavaScript) dans une page web vue par d'autres utilisateurs. Cette injection est rendue possible par une mauvaise validation ou une absence de validation des données saisies par l'utilisateur.
Types de XSS
- XSS Réfléchi (Reflected XSS) : Le code malveillant est inclus dans une requête HTTP et immédiatement renvoyé dans la réponse sans être entreposé. Exemple : Un lien malveillant envoyé par courriel ou inséré dans une URL :
- XSS Persistant (Stored XSS) : Le code malveillant est stocké sur le serveur, souvent dans une base de données, et affiché à plusieurs utilisateurs. Exemple : Un attaquant poste un commentaire contenant un script malveillant sur un forum :
- XSS DOM-Based : L'injection malveillante se produit directement dans le Document Object Model (DOM) côté client, sans passer par le serveur. Exemple : Un script modifie dynamiquement la page en fonction des paramètres URL.
L'attaque se déclenche lorsque la victime clique sur le lien et charge la page.
Chaque utilisateur consultant la page avec ce commentaire est victime de l'attaque.
Conséquences d'un XSS
- Vol de cookies : L'attaquant peut accéder aux cookies de session de la victime.
- document.cookie;
- Redirection vers des sites malveillants.
- Défacement de pages : Modification du contenu visible par l'utilisateur.
- Exécution de commandes dangereuses : Exploitation des privilèges de l'utilisateur connecté.
Exemples d'impact
- Phishing : Simuler un formulaire de connexion pour voler les identificateurs de l'utilisateur.
- Propagation de malwares : Charger des scripts qui téléchargent des logiciels malveillants.
- Prise de contrôle de session : Voler des cookies de session pour usurper l'identité de la victime.
Prévention contre les XSS
- Validation et Échappement des entrées utilisateur : Nettoyer toutes les entrées utilisateur en les échappant selon le contexte (HTML, JavaScript, URL,...) :
- <input type="text" value="<%= htmlspecialchars(userInput) %>">
- Utilisation de Content Security Policy (CSP) : Définir des politiques pour limiter les sources autorisées pour les scripts :
- Encodage des données en sortie : Toujours encoder les données avant de les afficher. Exemples : Encodez < en < et > en >.
- Éviter l'utilisation de eval ou de constructions similaires : Ces fonctions exécutent du code arbitraire et peuvent être manipulées.
- Utilisation de cadres d'application sécurisés : Par exemple, Angular et React appliquent automatiquement des protections contre les XSS via l'encodage des données.
Content-Security-Policy: script-src 'self';
Exemple corrigé (en PHP) :
Dernière mise à jour : Vendredi, le 15 novembre 2024