Maison >base de données >tutoriel mysql >Comment puis-je utiliser en toute sécurité les instructions WHERE IN pour empêcher l'injection SQL ?
Gérer les requêtes IN en toute sécurité : comprendre les instructions WHERE IN
Lorsque vous travaillez avec des requêtes de base de données , la récupération d'enregistrements spécifiques en fonction d'un ensemble de valeurs est une exigence courante. L'instruction WHERE IN fournit un moyen efficace d'y parvenir.
Schéma et intention de la base de données
Considérez la base de données suivante table :
CREATE TABLE IF NOT EXISTS tab (_id integer PRIMARY KEY AUTOINCREMENT, obj text NOT NULL);
Vous avez l'intention de récupérer des enregistrements dont la valeur de la colonne obj correspond à une liste de variables, ce qui pourrait être vulnérable à l'injection SQL s'il n'est pas géré correctement.
Première approche : méthode manuelle
Tentative de construire la requête manuellement à l'aide de list_of_vars et join() pour générer la chaîne d'espace réservé peut générer une erreur en raison d'une inadéquation dans le nombre de liaisons.
statement = "SELECT * FROM tab WHERE obj IN (?);" c.execute(statement, "'"+"','".join(list_of_vars)+"'")
Approche recommandée : paramétrée Requête
Pour exécuter en toute sécurité une requête IN, utilisez des espaces réservés pour les paramètres (?) et liez la liste des variables en tant que paramètres. Créez l'instruction à l'aide de la méthode format pour générer le nombre approprié d'espaces réservés :
statement = "SELECT * FROM tab WHERE obj IN ({0})".format(', '.join(['?'] * len(list_of_vars))) c.execute(statement, list_of_vars)
En passant list_of_vars comme liste de valeurs de paramètre, vous garantissez une liaison appropriée et évitez les vulnérabilités d'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!