Une faille XSS qu'es ce que c'est ?
C'est une injection de code html/javascript pour que ça soit exécuter coté client.
Le principe de l'injection xss est d'injecter du code dans une variable de type GET ou POST (généralement).
Pour vous expliquer plus clairement mes propos, voici un code PHP très basic :
CODE :
<?php
$nom = $_POST['nom'];
echo $nom;
?>
Le but de ce script est simplement d'afficher le contenu de la variable nom. Et bien ça, c'est l'exemple TYPIQUE du truc qu'il ne faut pas faire !
La variable n'est absolument pas filtrée, et il est donc possible d'y injecter du code javascript !
Pour voir la faille, il suffit d'inscrire ce code dans un site : <script>alert(/XSS/);</script> et là une alerte apparait sur votre écran.
A ce stade la, vous vous dites surement " Oui c'est bien beau, mais sa sert a rien une alerte ! Et en plus elle ne se sauvegarde pas ! ".
Pour sauvegarder l'alerte, il faut que la valeur envoyée s'enregistre dans une base de donnée !
Bon, maintenant que vous savez ce qu'es une faille XSS, passons maintenant à sa parade !
Pour paré cette attaque, beaucoup diraient " Il suffit de supprimer les balise <script>". Ça pourrais être une solution, vu que c'est cette balise qui permet la création de code javascript.
Nous allons donc pour tester ceci utiliser la fonction preg_replace() comme dans le script suivant :
CODE :
<?php
$nom = $_POST['nom'];
$script[0] = "<script>";
$script[1] = "</script>";
echo preg_replace($script,"AntiScript",$nom); //La balise " script " est remplacé par Antiscript, la création de code javascript est donc impossible.
?>
Refaites le test et vous constater avec stupeur que le code <script>alert(/XSS/);</script> n'affiche absolument plus rien à l'écran.
Et bien... même si cela à l'air en effet de sécuriser la faille ... et bien disons que sa ne sécuriser presque pas, voir pas du tout.
Il y a des dizaines de façon de bypasser une " sécurité " comme celle ci ... Il y a par exemple ce script qui marche plutôt bien : <img src=XSSED.png onerror=alert(/XSS/) />
Vous pouvez l'essayer, une alerte apparait en effet. Et c'est normal ... ce script n'utilisant pas la balise <script> il n'a aucune raison de ne pas être exécuté correctement.
Il y en a des dizaines de codes comme celui ci, suffit de réfléchir un minimum...
Et bien croyez le ou non ! Mais il existe belle et bien une fonction empêchant toute injection de code xss ( pour l'instant du moins ).
Et c'est fonction est : htmlentities()
Le but de cette fonction étant de convertir tous les caractères éligibles en entités HTML.
Nous allons utiliser cette fonction dans un script suivant :
CODE:
<?php
$nom = $_POST['nom'];
echo htmlentities($nom);
?>
Et la vous pouvez y aller Ça ne marchera pas !
La faille est rectifiée =) !
Voila c'est la fin de ce tutoriel sur l'initiation concernant la faille XSS.
Je vous conseille vraiment de prendre en compte cette faille qui peut être vraiment TRÈS néfaste pour votre site.
Vous avez vu l'utilisation de xss à travers une alerte ! Mais il est tout à fais possible de volé le cookie de l'Admin avec ce genre de faille, et dans ce cas présent de se connecter sur son compte ... Et si cela arrive je vous épargne les détails. =)
C'est donc une faille qu'il est très important d'éviter pour la sécurité de votre site
PS : Ce tutoriel n'a que pour seul et unique but de faire de la prévention concernant la faille XSS.