Bobby Tables: un guide pour prévenir L’injection SQL
pourquoi L’école de Bobby a-t-elle perdu ses enregistrements?
l’école stocke apparemment les noms de leurs élèves dans un tableau appelé étudiants. Lorsqu’un nouvel élève arrive, l’école insère son nom dans ce tableau. Le code effectuant l’insertion peut se présenter comme suit:
La première ligne crée une chaîne contenant une instruction SQL INSERT. Le contenu de la variable$studentName
est collé dans L’instruction SQL., La deuxième ligne envoie l’instruction SQL résultante à la base de données. L’écueil de ce code est que les données extérieures, dans ce cas le contenu de $studentName
, font partie de l’instruction SQL.
voyons d’abord à quoi ressemble L’instruction SQL si nous insérons un étudiant nommé John:
Cela fait exactement ce que nous voulons: il insère John dans la table des étudiants.
maintenant, nous insérons de petites Tables Bobby, en définissant$studentName
àRobert"); DROP TABLE Students;--
., L’instruction SQL devient:
cela insère Robert dans la table Students. Cependant, L’instruction INSERT est maintenant suivie d’une instruction DROP TABLE qui supprime la totalité de la table Students. Ouch!
Comment éviter les Tables Bobby
Il n’y a qu’une seule façon d’éviter les attaques de tables Bobby
- ne créez pas d’instructions SQL qui incluent des données extérieures.
- utilisez des appels SQL paramétrés.
Que »s il. Ne pas essayer d » échapper aux caractères invalides. Don »t essayer de le faire vous-même. Apprenez à utiliser les instructions paramétrées. Toujours, à chaque fois.,
la bande obtient une chose cruciale. La réponse n’est pas de « désinfecter vos entrées de base de données » vous-même. Elle est sujette à l’erreur.