Bienvenue dans le Bac à Sable !


      Retour à la liste des mises en situation.


Imaginez que ce qui suit est un endroit pour envoyer un message via une page de contact.
Entrez d'abord un message normal comme
mon message
et cliquez sur le bouton "Envoyer" ou "Valider".
Maintenant remplacez ce message par
<script>alert("faille XSS");</script>
Une boite de dialogue (alert) s'affiche avec "faille XSS" à l'intérieur.
Cela signifie que le code a été intégré à celui de la page web et s'est donc exécuté directement, au lieu d'être affiché comme il le devrait.
C'est ce que l'on appelle une faille XSS "réfléchie" car elle s'applique à chaque soumission du formulaire, seulement pour la personne l'ayant soumis et seulement à cet instant.


Inversement, la faille XSS dite "stockée" s'appliquerait si la vulnérabilité serait stockée dans une base de données (comme dans un pseudonyme). Dans ce cas chaque affichage normal du pseudonyme donnerait lieu à une exécution de la vulnérabilité. Cela se verrait donc potentiellement dans le navigateur de n'importe quel internaute qui visiterait la page.
La faille XSS peut être exploitable de différentes façons et non pas que dans des formulaires. Par exemple dans des images, feuilles de style, etc.
Voici une liste de possibilités d'exploiter la faille XSS : https://github.com/payloadbox/xss-payload-list

Explications et contre-mesures

La faille XSS est l'une des plus populaires et dangereuses.
Elle consiste à injecter du code html et javascript dans une page web.
Le code entre les balises "script" est un code javascript qui s'exécute directement.
Ce code n'est pas persistant dans notre exemple car il n'est pas stocké dans une base de données.
Par contre s'il avait été persistant, tous les autres utilisateurs auraient vu ce code s'exécuter.
alert va juste afficher un message, mais cela aurait pu être pire, par exemple une "iframe" qui remplacerait toute la page par un autre site.
Pour contrer cela, il faut donc toujours filtrer les données entrées utilisateurs.
Cela en utilisant par exemple les fonctions htmlspecialchars ou htmlentities en PHP.
Plus d'informations.