Nous essayons de mettre à jour notre moteur de recherche asp classique pour le protéger de l'injection SQL. Nous avons une fonction VB 6 qui construit une requête dynamiquement en concaténant une requête ensemble en fonction des différents paramètres de recherche. Nous avons converti cela en une procédure stockée en utilisant SQL dynamique pour tous les paramètres, sauf pour les mots-clés.Dynamic SQL - Requête de recherche - Variable Nombre de mots-clés
Le problème avec les mots-clés est qu'il y a un nombre de mots variables fourni par l'utilisateur et nous voulons rechercher plusieurs colonnes pour chaque mot-clé. Puisque nous ne pouvons pas créer un paramètre distinct pour chaque mot clé, comment pouvons-nous créer une requête sécurisée?
Exemple:
@CustomerId AS INT
@Keywords AS NVARCHAR(MAX)
@sql = 'SELECT event_name FROM calendar WHERE customer_id = @CustomerId '
--(loop through each keyword passed in and concatenate)
@sql = @sql + 'AND (event_name LIKE ''%' + @Keywords + '%'' OR event_details LIKE ''%' + @Keywords + '%'')'
EXEC sp_executesql @sql N'@CustomerId INT, @CustomerId = @CustomerId
Quelle est la meilleure façon de gérer et de maintenir cette protection contre l'injection SQL?
+1 cette approche évitera le problème échappe entièrement –