É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 : "\_",
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!