Les injections SQL sont un réel risque dans toute application qui effectue des requêtes à une base de données.
Les utilisateurs malveillants tenteront d'entrer des caractères spécifiques pour que, lorsque ces informations seront utilisées dans une requête SQL, la requête SQL soit transformée à leur avantage.
Dans cette fiche :
Voici un exemple classique du risque encouru lorsqu'une requête utilise une variable dont la valeur peut avoir été entrée par un usager.
Cette requête SQL permet vérifier si l'usager a fourni les bonnes informations d'authentification :
$requete = "SELECT nomfamille, prenom FROM usagers WHERE code = '$code' AND motdepasse = '$motdepassecrypte'";
Dans un formulaire d'authentification, un usager pourrait entrer comme code d'authentification « 1' OR 1=1 -- ». Ceci peut sembler bizarre mais chacun de ces caractères joue un rôle bien particulier. La requête lancée sur le serveur sera la suivante :
SELECT nomfamille, prenom FROM usagers WHERE code = '1' OR 1=1 -- ' AND motdepasse = '...';
L'usager malveillant pourrait donc s'authentifier sur le système sans connaître le mot de passe puisque la condition 1=1 serait toujours évaluée à VRAI et que les caractères -- indiquent que le reste de la requête est un commentaire.
Vous pouvez tester cette technique sur un site de défis de sécurité : https://ringzer0team.com/login
La meilleure technique pour se prémunir contre une telle attaque est d'utiliser une requête préparée dès que la requête contient une variable.
La requête préparée va s'assurer qu'aucun caractère ne puisse modifier la nature de la requête SQL.
L'apostrophe ne sera donc pas interprétée comme caractère de fin de chaîne et les caractères -- ne seontpas interprétés comme une marque de commentaire alors l'authentification ne pourra pas avoir lieu sans les vraies informations d'un usager.
Source : http://xkcd.com/327/
Un vendeur automobile de la région, La Clé d'Or Autos, voulait effectuer des transactions sur une nouvelle plateforme gouvernementale.
Rien à faire, le propriétaire ne réussissait pas à travailler avec cette plateforme. Il n'arrivait jamais à s'authentifier.
Après des mois de discussions avec les responsables de la plateforme, il a fini par se faire dire : « Monsieur, nous avons trouvé la cause de tous vos soucis. C'est à cause du nom de votre commerce. En informatique, un apostrophe suivi de OR a une signification particulière et c'est ce qui fait que rien ne fonctionne pour vous ».
Sans commentaire :-(
« Injection SQL ». PHP. http://php.net/manual/fr/security.database.sql-injection.php
« Sécurité ». PHP. http://www.php.net/manual/fr/security.php
▼Publicité