J'enseigne la sécurité informatique dans les écoles polytechniques. Souvent, pour les étudiants, ils ont une certaine confusion sur les termes utilisés pour l'injection SQL, alors laissez-moi essayer de clarifier.
Dans le contexte d'une application Web comme Facebook,
L'injection SQL se produit lorsque le l'utilisateur Web normal entre le code SQL dans les champs de données Par exemple,
'OR' 1 '=' 1 dans les zones de texte d'un formulaire de connexion.
La meilleure personne pour empêcher l'injection SQL, c'est le développeur Web, alias la personne chargée d'écrire le code de l'application Web pour lire / écrire des données dans la base de données.
Le moyen le plus simple d'empêcher l'injection SQL par le développeur Web est d'utiliser requêtes paramétrées.
Les instructions préparées et les requêtes paramétrées signifient la même chose.
J'utiliserai les requêtes paramétrées à partir de maintenant.
Les requêtes paramétrées se réfèrent à la manière dont le code SQL est défini pour la première fois, puis les données sont placées dans les paramètres appropriés.
Par exemple dans .Net
Mettre à jour le jeu ʻusers` set ` name` = @name où ʻid` = @id
les paramètres @name et @id sont les données. Le reste est le code SQL.
Gardez à l'esprit que les requêtes paramétrées sont généralement mais pas toujours effectuées au niveau du code de l'application Web.
Il y a 2 façons d'écrire des requêtes paramétrées.
- Dans le code de l'application Web en fonction de la langue utilisée
- Dans la base de données utilisant des procédures stockées
Donc dans un certain sens, oui , les procédures stockées sont une forme de requêtes paramétrées.
Il existe d'autres moyens d'empêcher l'injection SQL en échappant des caractères spéciaux comme des guillemets simples. Par exemple, en PHP, vous pouvez utiliser mysql_real_escape_string qui met essentiellement des barres obliques avant les guillemets simples.
Ce n'est pas idéal à cause de problèmes avec% et soulignement pour l'opérateur LIKE dans certaines bases de données comme MySQL. voir ce pdf pour plus de détails.
Pour faire court, toutes les options suggérées concernent la désinfection (nettoyage) des entrées utilisateur pour nettoyer le code SQL.
Le meilleur moyen est d'utiliser des requêtes paramétrées en fonction du langage de programmation utilisé.
Fin de l'histoire.