Qu'est-ce que le XSS ?
Le XSS (Cross-Site Scripting) est une vulnerabilite de securite web qui permet a un attaquant d'injecter du code JavaScript malveillant dans des pages web consultees par d'autres utilisateurs. Le XSS est l'une des vulnerabilites les plus repandues et figure dans le Top 10 OWASP. Il exploite la confiance qu'un navigateur accorde au contenu recu d'un site web.
Les trois types de XSS
XSS reflechi (Reflected)
Le script malveillant est inclus dans une requete (generalement via l'URL) et reflete dans la reponse du serveur. L'attaquant envoie un lien piege a la victime. Quand elle clique, le script s'execute dans son navigateur. C'est le type le plus courant et le plus facile a exploiter via du phishing.
XSS stocke (Stored/Persistent)
Le script est stocke durablement sur le serveur (en base de donnees) et s'execute a chaque fois qu'un utilisateur consulte la page affectee. Plus dangereux que le XSS reflechi car il ne necessite pas que la victime clique sur un lien specifique. Exemples : commentaires de blog, messages de forum, profils utilisateurs non sanitises.
XSS base sur le DOM (DOM-based)
Le script manipule le DOM directement cote client sans transiter par le serveur. La vulnerabilite reside dans le code JavaScript front-end qui utilise des donnees non fiables (document.location, document.referrer, window.name) pour modifier la page. Plus difficile a detecter car le serveur ne voit pas l'attaque.
Impact et consequences
Un XSS reussi permet de voler les cookies de session (detournement de compte), rediriger l'utilisateur vers un site malveillant, capturer les frappes clavier (keylogging), modifier le contenu de la page (defacement), et executer des actions au nom de l'utilisateur authentifie.
Protection contre le XSS
Les defenses efficaces incluent : l'echappement systematique des sorties HTML (output encoding) selon le contexte (HTML, attribut, JavaScript, URL), l'utilisation de frameworks qui echappent par defaut (React, Angular, Vue), la mise en place d'un en-tete Content-Security-Policy (CSP) restrictif, le flag HttpOnly sur les cookies de session, la validation des entrees en liste blanche, et l'utilisation de bibliotheques de sanitisation comme DOMPurify pour le HTML utilisateur.