Dans le domaine du développement logiciel, prévenir les attaques par injection SQL est crucial. Bien que les requêtes SQL paramétrées constituent la meilleure méthode de nettoyage des entrées, certains développeurs ont encore recours à l'échappement des guillemets simples et à l'encapsulation des entrées utilisateur entre guillemets simples comme mécanisme de défense alternatif.
Techniques d'évasion défectueuses
La méthode consiste à remplacer les guillemets simples dans la saisie utilisateur par des guillemets simples doubles et à placer la chaîne entière entre guillemets simples :
<code>sSanitizedInput = "'" & Replace(sInput, "'", "''") & "'"</code>
L'idée derrière cette technique est que tous les guillemets simples saisis par l'utilisateur sont efficacement neutralisés, empêchant ainsi la terminaison de la chaîne. Par conséquent, tous les autres caractères, tels que les points-virgules ou les signes de pourcentage, font partie de la chaîne et ne sont pas exécutés en tant que commandes.
Vulnérabilité d'injection
Cependant, cette technique ne peut pas gérer les situations dans lesquelles la saisie de l'utilisateur elle-même peut contenir des guillemets simples doubles. Dans ce cas, la chaîne se termine et l'entrée restante peut être exécutée en tant que commande SQL.
Exemple de saisie
Pour illustrer cela, considérons la saisie utilisateur suivante :
<code>'SensitiveData' HAVING AMOUNT>2000 OR ''=''</code>
Après exécution, le code deviendra :
<code>SELECT * FROM ACCOUNT WHERE NAME='SensitiveData' HAVING AMOUNT>2000 OR ''=''</code>
Cette entrée injecte avec succès une clause OR dans la requête SQL, en contournant la désinfection prévue.
Autres considérations
Il est important de noter que cette technique d'échappement présente d'autres vulnérabilités, notamment :
Bonnes pratiques
Ne comptez pas sur des techniques de nettoyage des entrées ad hoc, suivez ces bonnes pratiques pour empêcher l'injection SQL :
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!