Мы пытаемся обновить наш классический поисковый движок asp, чтобы защитить его от внедрения SQL. У нас есть функция VB 6, которая динамически формирует запрос, объединяя запрос на основе различных параметров поиска. Мы преобразовали это в хранимую процедуру, используя динамический 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?