Qu'est-ce que le script intersites ?

L'une des classes de vulnérabilité les plus courantes dans les sites Web est appelée « Cross-Site Scripting » ou « XSS ». Les vulnérabilités XSS sont là où il est possible pour un utilisateur de provoquer l'exécution de JavaScript. Il existe un certain nombre de variantes différentes de la vulnérabilité XSS, avec divers degrés de gravité.

Le problème avec un attaquant pouvant exécuter JavaScript dans les sessions d'autres utilisateurs est qu'il est alors possible pour l'attaquant de faire n'importe quoi sur le site Web que les victimes voient. Cela inclut la redirection des victimes vers des sites Web externes, le vol de jetons d'authentification et la surveillance des détails de paiement.

La forme la plus grave de vulnérabilité XSS est le script intersites « stocké » ou « persistant », c'est là que il est possible pour un attaquant de créer une charge utile XSS puis de la soumettre, afin qu'elle soit enregistrée dans la base de données. Avec un exploit XSS enregistré dans la base de données, il est alors possible qu'il affecte d'autres utilisateurs sur une longue période.

Une autre forme de Cross-Site Scripting est "Reflected", ce type n'est enregistré à aucun moment, à la place, la charge utile est incluse dans le navigateur. En règle générale, ce type de XSS fait partie des attaques de phishing, où un attaquant tente de tromper une victime pour qu'elle clique sur un lien malveillant.

Généralement, la plupart des attaques XSS envoient la charge utile au serveur à un moment donné, mais certaines attaques sont purement côté client, n'étant jamais envoyé au serveur et affectant uniquement le côté client JavaScript. C'est ce qu'on appelle le XSS basé sur DOM car il reste dans le modèle d'objet de document JavaScript, ou DOM. Ce type de vulnérabilité est particulièrement difficile à identifier et à résoudre car les exploits ne sont jamais vus par le serveur et ne peuvent donc pas être enregistrés.

Historiquement, la technique de prévention contre les vulnérabilités XSS consiste à filtrer toutes les données soumises par les utilisateurs, en utilisant des listes de blocage pour rejeter tout message contenant des caractères ou des mots significatifs en JavaScript. Cela a eu tendance à conduire à une course aux armements pour trouver des contournements pour le filtre tout en empêchant également certaines soumissions d'utilisateurs légitimes. La bonne solution consiste à utiliser des entités HTML pour coder les données soumises par l'utilisateur. avec les modules d'entités HTML activés, les caractères sont automatiquement codés dans un format où le navigateur sait les afficher comme les symboles corrects mais pas pour les traiter comme du code.