Мы пытаемся обновить нашу классическую поисковую систему 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-инъекций?