Мы пытаемся обновить нашу классическую поисковую систему asp, чтобы защитить ее от SQL-инъекции. У нас есть функция VB 6, которая строит запрос динамически, объединяя запрос вместе на основе различных параметров поиска. Мы преобразовали это в хранимую процедуру, используя динамический sql для всех параметров, за исключением ключевых слов.Динамический SQL-запрос поиска - переменная Количество ключевых слов
Проблема с ключевыми словами заключается в том, что существуют слова с переменным числом, предоставленные пользователем, и мы хотим найти несколько столбцов для каждого ключевого слова. Поскольку мы не можем создать отдельный параметр для каждого ключевого слова, как мы можем создать безопасный запрос?
Пример:
@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
Что такое лучший способ справиться с этим и поддержание защиты от SQL инъекций?
+1 этот подход позволит избежать убегающую проблему полностью – 2008-09-30 22:36:10