Maison >base de données >tutoriel mysql >Les caractères de retour arrière et de tabulation doivent-ils être échappés dans les injections SQL ?

Les caractères de retour arrière et de tabulation doivent-ils être échappés dans les injections SQL ?

Linda Hamilton
Linda Hamiltonoriginal
2024-10-28 04:09:30215parcourir

 Should Backspace and Tab Characters Be Escaped in SQL Injections?

Échapper aux caractères spéciaux dans les injections SQL

Pour empêcher les injections SQL, il est crucial d'échapper aux caractères spécifiques qui peuvent manipuler l'exécution des requêtes. Selon la fonction mysql_real_escape_string() de l'API MySQL, ces caractères doivent être échappés :

<pre class="brush:php;toolbar:false">0x00 : "\0",
0x08 : "\b",
0x09 : "\t",
0x0a : "\n",
0x0d : "\r",
0x1a : "\Z",
0x22 : '\"',
0x25 : "\%",
0x27 : "\'",
0x5c : "\\",
0x5f : "\_",
\n \r \ ' " \Z

Cependant, la bibliothèque de sécurité ESAPI d'OWASP.org pour Python va au-delà de ces caractères, en incluant les éléments suivants dans son mécanisme d'encodage :

SELECT a FROM b WHERE c = '...user input ...';

Bien qu'il soit compréhensible pourquoi les métacaractères comme « % » et « _ » doivent être échappés, l'inclusion des caractères de retour arrière (« b ») et de tabulation (« t ») soulève des questions.

Problèmes de sécurité liés aux tabulateurs et aux caractères de retour arrière

Caractère de tabulation ('t')

Un caractère de tabulation (code ASCII 9) déplace le curseur au taquet de tabulation suivant, défini pour un système particulier. Dans une requête SQL, une tabulatrice peut être utilisée pour insérer des espaces vides ou aligner des données. En fonction des paramètres des taquets de tabulation, un attaquant pourrait potentiellement modifier une requête ou injecter des espaces, entraînant un comportement involontaire.

Caractère de retour arrière ('b')

Un retour arrière Le caractère (code ASCII 8) déplace le curseur d'un caractère vers l'arrière, l'écrasant ainsi. Dans une requête SQL, un retour arrière peut être utilisé pour effacer des données précédemment saisies, ce qui peut conduire à des injections ou à une manipulation de données.

Exemple : exploitation du caractère de retour arrière

Considérez ce qui suit requête :

Bobby]dor[p TA[ble[s

Si un utilisateur malveillant saisit une valeur contenant des caractères de retour arrière, il pourrait potentiellement effacer une partie de la requête, entraînant un comportement involontaire. Par exemple, en insérant cette entrée :

SELECT a FROM b WHERE c = 'Bobby';

Après les espaces arrière, supprimez les caractères "[dor[p TA[ble[s", la requête devient effectivement :

Ce malware malveillant l'entrée pourrait potentiellement renvoyer toutes les lignes où c est égal à « Bobby », compromettant potentiellement les informations sensibles.

Conclusion

Bien que l'échappement des caractères de tabulation et de retour arrière ne soit pas généralement requis, ils peut être utile dans certains scénarios pour empêcher les injections SQL. En échappant à ces caractères, les développeurs peuvent garantir que les utilisateurs malveillants ne peuvent pas exploiter les vulnérabilités potentielles pour falsifier ou compromettre les requêtes 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!

Déclaration:
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