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 ?

Comment puis-je utiliser en toute sécurité les instructions WHERE IN pour empêcher l'injection SQL ?

DDD
Libérer: 2025-01-04 03:26:40
original
562 Les gens l'ont consulté

How Can I Safely Use WHERE IN Statements to Prevent SQL Injection?

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

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)+"'")
Copier après la connexion

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

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!

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal