Maison > base de données > tutoriel mysql > L'échappement des guillemets simples est-il une défense fiable contre l'injection SQL ?

L'échappement des guillemets simples est-il une défense fiable contre l'injection SQL ?

Mary-Kate Olsen
Libérer: 2025-01-18 12:10:16
original
344 Les gens l'ont consulté

Is Escaping Single Quotes a Reliable Defense Against SQL Injection?

Protection contre les injections SQL : l'erreur de l'échappement des guillemets simples

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>
Copier après la connexion

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>
Copier après la connexion

Après exécution, le code deviendra :

<code>SELECT * FROM ACCOUNT WHERE NAME='SensitiveData' HAVING AMOUNT>2000 OR ''=''</code>
Copier après la connexion

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 :

  • Ne protège pas contre tous les types d'attaques par injection SQL, telles que celles utilisant des commentaires ou d'autres terminateurs d'instructions.
  • Présente les frais généraux de performances et de maintenance.
  • Rendre le code difficile à lire et à comprendre.

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 :

  • Utilisez des requêtes SQL paramétrées ou des instructions préparées par JDBC.
  • Autoriser uniquement les valeurs et formats d'entrée attendus (liste blanche).
  • Utilisez les listes noires uniquement lorsque cela est absolument nécessaire et après avoir mis en œuvre des mesures d'atténuation supplémentaires.
  • Évitez le SQL dynamique et la concaténation de chaînes.
  • Envisagez d'utiliser des procédures stockées avec des autorisations de base de données limitées.

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal