Cross-site scripting - Définition

Source: Wikipédia sous licence CC-BY-SA 3.0.
La liste des auteurs de cet article est disponible ici.

Introduction

Le cross-site scripting, abrégé XSS, est un type de faille de sécurité des sites Web, que l'on trouve typiquement dans les applications Web qui peuvent être utilisées par un attaquant pour provoquer un comportement du site Web différent de celui désiré par le créateur de la page (redirection vers un site, vol d'informations, etc.). Il est abrégé XSS pour ne pas être confondu avec le CSS (feuilles de style), X étant une abréviation commune pour « cross » (croix) en anglais.

Le terme cross-site scripting n'est pas une description très précise de ce type de vulnérabilité. Mark Slemko, pionnier du XSS, en disait

« Le problème n'est pas simplement le 'scripting', et il n'y a pas forcément quelque chose entre plusieurs sites. Alors pourquoi ce nom ? En fait, le nom a été donné quand le problème était moins bien compris, et c'est resté. Croyez-moi, nous avions des choses plus importantes à faire que de réfléchir à un meilleur nom. »

Le principe est d'injecter des données arbitraires dans un site web, par exemple en déposant un message dans un forum, mais aussi par des paramètres d'URL, etc. Si ces données arrivent telles quelles dans la page web transmise au navigateur (par les paramètres d'URL, un message posté, etc.) sans avoir été vérifiées, alors il existe une faille : on peut s'en servir pour faire exécuter du code malveillant en langage de script (du JavaScript le plus souvent) par le navigateur web qui consulte cette page.

La détection de la présence d'une faille XSS peut se faire par exemple en entrant un script Javascript dans un champ de formulaire ou dans une URL :

            

Si une boîte de dialogue apparaît, on peut en conclure que l'application Web est sensible aux attaques de type XSS.

Les risques

L'exploitation d'une faille de type XSS permettrait à un intrus de réaliser les opérations suivantes :

  • Redirection (parfois de manière transparente) de l'utilisateur.
  • Vol d'informations, par exemple sessions et cookies.
  • Actions sur le site faillible, à l'insu de la victime et sous son identité (envois de messages, suppression de données, etc.)
  • Plantage de la page (boucle infinie d'alertes par exemple), et souvent du navigateur.

Une faille de type XSS est à l'origine de la propagation des virus Samy sur MySpace en 2005 ainsi que de Yamanner sur Yahoo! Mail en 2006.

Éviter la faille

Plusieurs techniques permettent d'éviter le XSS :

  • Retraiter systématiquement le code HTML produit par l'application avant l'envoi au navigateur ;
  • Filtrer les variables affichées ou enregistrées avec des caractères '<' et '>' (en cgi comme en PHP). De façon plus générale, donner des noms préfixés par exemple par "us" (user string) aux variables contenant des chaînes venant de l'extérieur pour les distinguer des autres, et ne jamais utiliser aucune des valeurs correspondantes dans une chaîne exécutable (en particulier SQL !) sans filtrage préalable.
  • En PHP :
    • utiliser la fonction htmlspecialchars() qui filtre les '<' et '>' (c.f. ci-dessus) ;
    • utiliser strip_tags() qui supprime les balises.
  • Utiliser de façon propre les balises HTML (insuffisant).

Il existe des bibliothèques qui permettent de filtrer efficacement du contenu balisé issu de l'utilisateur (systèmes de publication).

Par ailleurs, il est également possible de se protéger des failles de type XSS à l'aide d'équipements réseaux dédiés tels que les pare-feux applicatifs. Ces derniers permettent de filtrer l'ensemble des flux HTTP afin de détecter les requêtes suspectes.

Page générée en 0.090 seconde(s) - site hébergé chez Contabo
Ce site fait l'objet d'une déclaration à la CNIL sous le numéro de dossier 1037632
A propos - Informations légales
Version anglaise | Version allemande | Version espagnole | Version portugaise