Ce weekend, un ami qui bosse comme développeur dans une petite société me montre en avant première leur nouveau site web.
L’occasion était trop grande : je voulais tester un peu...

 Première chose que je fais : je prends le champ « Rechercher » et j’essaye un tout petit peu d’injection SQL. Heureusement pour lui ça ne marche pas ! 

 Il me dit que ça y est, c’est bon, si ça, ça ne marche pas, alors personne ne pourra l’embêter !

J’ai oublié de préciser qu’il a réalisé son site en PHP (baahhhh… ) et avec en plus une bonne dose d’AJAX.
Maintenant que Cyril m’a montré ce fabuleux outil qu’est Fiddler, je le lance et je me balade un peu sur le site. Je vois un système de petites annonces, je poste donc une annonce, et là, qu’est ce que je vois ? La page se raffraichit partiellement et crée mon annonce. Je regarde donc les paramètres de la requête AJAX qui a été envoyée, et ça donne ça :

exec = "add"
text = "tout le contenu de l’annonce…"
user = monUserName
id = l’ID de l’annonce

 

 Et là ça y est, j’ai trouvé le filon : j’ai créé une simple application console en C#, avec une boucle et dedans un WebRequest qui envoie pleins, pleins de requêtes vers cette page, et comme aucune validation n’est ensuite effectuée, je fais exploser sa base MySQL en 45 min :)

 Et ça, c’était encore avant d’avoir découvert que le champ exec pouvait également avoir comme valeur "remove" et prendre un ID en paramètre (en deux temps trois mouvements j’avais modifié l’application précédente pour qu’elle supprime toutes les annonces de la base !)

 

 Donc moi je dis, l’AJAX c’est bien, mais bon, ça ne doit pas devenir indispensable au fonctionnement normal d’une page, et ça ne doit pas non plus servir à effectuer des actions critiques (ajout/suppression en base de données...) comme celles-ci, surtout quand ça nuit à la sécurité !

 Evidemment, je lui ai expliqué tout ça, et il a blêmi en voyant la base grossir énormément au début, et se faire vider totalement ensuite ! (je lui ai bien sûr dit qu’en .NET, ça ne serais pas arrivé, mais bon, ça tout le monde le sais )

 Finalement je me dis qu'avec AJAX on est en train de privilégier l'aspect esthétique à la sécurité et à l'accessibilité !

 Nurgle