XSS, et comment s'en protéger
Posté le Saturday 17 March 2012 | Catégories : PHP
Le Cross-site Scripting (XSS) est une attaque qui consiste à envoyer du code (généralement Javascript) à un site web (par exemple en utilisant un formulaire) de telle que sorte que ce code soit affiché et donc exécuté par le navigateur des autres utilisateurs du site.
Imaginons par exemple un guest book, ou un formulaire servant à laisser un commentaire sur un produit. Si le contenu du formulaire n'est pas vérifié, un attaquant pourrait laisser un commentaire sur votre site contenant du code Javascript. L'exemple le plus souvent donné est un simple alert("XSS"), mais un attaquant peut naturellement également voler le numéro de session (stocké dans un cookie) de l'utilisateur, ou effectuer une autre attaque.
Protéger une application
Dans le monde PHP, les solutions les plus souvent conseillées pour se protéger du XSS consistent à utiliser strip_tags ou htmlspecialchars. Ces solutions ne sont cependant pas suffisantes car de nombreux navigateurs (et surtout Internet Explorer) possèdent des failles qui les rendent vulnérables à d'autres formes plus inventives d'attaques XSS. Il suffit pour s'en convaincre de consulter la liste d'attaques présentées sur le site ha.ckers.org.
Une autre solution consiste à utiliser un filtre externe, généralement appelé Web Application Firewall (WAF). Il en existe plusieurs, notamment Apache mod_security et CISCO ACE. Même s'ils apportent un niveau de sécurité supplémentaires, les filtres utilisés sont généralement trop simples et peuvent être contournés.
Finalement, une possibilité consiste à utiliser une filtre implémenté en PHP, comme HTML Purifier.
HTML Purifier
HTML Purifier s'installe facilement grâce au système PEAR :
pear channel-discover htmlpurifier.org
pear install hp/HTMLPurifier
L'utilisation de base est simple également :
require_once 'HTMLPurifier.auto.php';
$purifier = new HTMLPurifier();
$html = $purifier->purify($dirty_html);
Les différentes options de configuration sont naturellement expliquées sur le site de HTML Purifier.