Maison >base de données >tutoriel mysql >Comment utiliser en toute sécurité les caractères génériques SQL avec « MySQLdb » de Python pour éviter l'injection ?

Comment utiliser en toute sécurité les caractères génériques SQL avec « MySQLdb » de Python pour éviter l'injection ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-21 03:31:08797parcourir

How to Safely Use SQL Wildcards with Python's `MySQLdb` to Avoid Injection?

Utilisation de caractères génériques SQL et d'opérateurs LIKE dans les formats de chaîne Python

L'insertion de caractères génériques SQL et d'opérateurs LIKE dans les formats de chaîne Python peut être difficile. Cet article propose une solution aux erreurs courantes rencontrées lors de la tentative d'exécution de requêtes MySQL à l'aide de MySQLdb.

Erreur de MySQLdb

Les tentatives 3 et 4 ont renvoyé des erreurs de MySQLdb, indiquant " pas assez d'arguments pour formater la chaîne." Cela se produit car le signe % est interprété comme un spécificateur de format par l'opérateur de formatage de chaîne en Python.

Vulnérabilité à l'injection SQL

Les quatre premières tentatives affichées sont vulnérables à Attaques par injection SQL. Les entrées de l'utilisateur, telles que la variable de requête, doivent être nettoyées ou échappées pour empêcher l'exécution de SQL malveillant.

Approche correcte

L'approche recommandée consiste à utiliser un espace réservé au lieu du formatage de chaîne. Voici un exemple :

curs.execute("""SELECT tag.userId, count(user.id) as totalRows 
                  FROM user 
            INNER JOIN tag ON user.id = tag.userId 
                 WHERE user.username LIKE %s""", ('%' + query + '%',))

Deux arguments sont passés à exécuter() :

  • L'instruction SQL avec un espace réservé pour insérer le caractère générique.
  • Un tuple contenant la valeur de requête nettoyée avec les caractères génériques.

Cette approche garantit que l'instruction SQL est valide et protégée de SQL injection.

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