Maison > base de données > tutoriel mysql > Comment puis-je utiliser en toute sécurité des paramètres avec des instructions SQL LIKE pour empêcher l'injection SQL ?

Comment puis-je utiliser en toute sécurité des paramètres avec des instructions SQL LIKE pour empêcher l'injection SQL ?

Mary-Kate Olsen
Libérer: 2024-12-31 18:03:11
original
850 Les gens l'ont consulté

How Can I Safely Use Parameters with SQL LIKE Statements to Prevent SQL Injection?

Utilisation des paramètres dans l'instruction SQL LIKE

Lors de la création d'une fonction de recherche, il est impératif d'utiliser des paramètres pour se protéger contre les menaces d'injection SQL. Cependant, l'utilisation de paramètres dans une instruction LIKE peut poser des problèmes, comme le démontre la requête suivante :

SELECT * FROM compliance_corner WHERE (body LIKE '%@query%') OR (title LIKE '%@query%')
Copier après la connexion

Cette requête est sensible à l'injection SQL car les paramètres ne sont pas correctement nettoyés. Pour remédier à ce problème, les paramètres doivent être correctement définis et attribués à l'aide d'une valeur telle que :

Dim cmd as New SqlCommand(
 "SELECT * FROM compliance_corner"_
  + " WHERE (body LIKE @query )"_ 
  + " OR (title LIKE @query)")

cmd.Parameters.Add("@query", "%" +searchString +"%")
Copier après la connexion

Dans cet exemple, le paramètre @query est défini à l'aide de la valeur de searchString. Cela garantit que l'entrée de l'utilisateur, searchString, est correctement nettoyée et que la requête est protégée contre l'injection SQL.

De plus, il convient de noter que la requête renvoie des résultats lorsqu'elle est exécutée directement dans SQL Server :

SELECT * FROM compliance_corner WHERE (body LIKE '%max%') OR (title LIKE '%max%')
Copier après la connexion

En effet, la requête est exécutée sans paramètres et l'instruction LIKE compare la chaîne %max% directement avec le contenu des colonnes body et title. Cependant, lorsqu'elle est exécutée avec des paramètres, l'instruction LIKE compare la valeur du paramètre, @query, avec le contenu des colonnes, qui est correctement nettoyé, ce qui ne renvoie aucune correspondance.

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!

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