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%')
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 +"%")
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%')
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!