Sécurité SQL
Sécurité et SQL
Injection SQL
Une injection SQL est l'exploitation d'une faille de sécurité d'une application interagissant avec une base de données (comme un formulaire). Le but est d'injecter une requête SQL non prévue par le système et pouvant compromettre sa sécurité.
Imaginons un formulaire de type accès privé avec ce traitement classique de requête SQL saisie en PHP$requete = "SELECT * WHERE nom = '".$nom."' AND pwd = '".$mdp."'";
SELECT * WHERE nom = 'durand' AND pwd = 'vfsdfvv';
Si le script PHP qui exécute cette requête ne vérifie pas les données entrantes, il existe une grosse faille de sécurité. Le pirate pourra saisir dans le champ nom "durand --" et n'importe quel mot de passe.
SELECT * WHERE nom = 'durand --' AND pwd = 'vfsdfvv';
SELECT * WHERE nom = 'durand';
Pour le mot de passe, le pirate pourra injecter le code suivant : ' or 1=1--
L'apostrophe indique la fin de la zone de frappe de l'utilisateur, le code "or 1=1" demande au script si 1=1 est vrai, or c'est toujours le cas, et -- indique le début d'un commentaire.
La solution consiste à traiter les chaînes de caractères entrées par l'utilisateur avec la fonctions PHP mysql_real_escape_string qui transforme la chaîne ' -- en \' --