Cross-site scripting/fr

Les Cross site scripting, ou XSS ou encore injection de JavaScript arbitraire sont un type de faille de sécurité des ordinateurs que l'on trouve typiquement dans les applications web qui permettent aux attaquants d'injecter des  scripts côté client dans les pages web visitées par les autres utilisateurs.

Pour toute information concernant les XSS côté client et comment les empêcher, voir.

Exemples
Exemples de XSS :


 * Un attaquant conduit un utilisateur authentifié à visiter une URL artisanale spécifique, ou un site web qu'il contrôle et qui peut le rediriger vers cette URL artisanale.
 * L'URL pointe sur votre application web et inclut du code JavaScript dans la chaîne de la requête. L'application web, à cause de l'échappement insuffisant, injecte le code JavaScript arbitraire dans la page affichée à l'utilisateur.
 * Le JavaScript s'exécute ayant un accès complet aux cookies de l'utilisateur. Il peut modifier la page comme il veut, et soumettre des formulaires à l'insu de l'utilisateur. Le risque est particulièrement important si la victime est un administrateur avec des droits spécifiques.

Voir aussi les exemples d'exploitation de Wikipedia.

Exemple :

L'attaquant envoie la victime sur une URL telle que :

Les requêtes POST sont aussi vulnérables en utilisant du JavaScript hors site.

Les victimes n'ont même pas à visiter directement la page pour être atteints. Certains sites web tiers vicieux incluent des iframes cachées vers les URL artisanales pour attaquer un utilisateur qui visite un de leurs sites. Ils peuvent tout aussi bien être incités à visiter une URL malicieuse ou artisanale en utilisant les services des URLS courtes ou en maquillant l'URL en une autre.

Arrêter les XSS
Pour empêcher le XSS suivez ces indications :


 * Validez vos entrées
 * Echappez vos sorties

Vous pouvez sauter la validation mais jamais l'échappement. Echappez tout.

Ce n'est pas gênant que l'échappement soit redondant avec la validation, le coût en perte de performance est minime par rapport à la sécurité démontrable apportée à une application web. Il n'est pas important que les entrées proviennent d'une source de confiance, l'échappement est même nécessaire car il vous apporte normalisation et sécurité.

Echappez aussi près que possible de la sortie de sorte à ce que le relecteur puisse vérifier facilement que cela a été fait. Cela vous aide à vérifier également votre propre code également.

L'encodage des sorties est fonction du contexte. Soyez donc conscient du contexte de sortie prévu et encodez de manière appropriée (par exemple l'entité HTML, l'URL, le JavaScript, etc.)

La page OWASP Abridged XSS Prevention Cheat Sheet est un guide de référence rapide utile et à jour pour traiter les problèmes XSS.

All this is true of any text-based interchange format. We concentrate on HTML because web apps tend to generate a lot of it, and because the security issues are particularly severe. Every text format should have a well-studied escaping function.

Voici quelques fonctions pratiques qui réalisent l'échappement du HTML pour votre site.

Sortie échappée de MediaWiki
MediaWiki also has some elegant built-in interfaces which implicitly escape your output. For SQL using the 'key' => 'value' syntax of conditions implicitly escapes values. And the Html:: and Xml:: interface methods escape attributes, and depending on the method used may escape a text value as well.

Liens externes

 * Echappement, w3.org. Définition de l'échappement très bien rédigée.