我们正在尝试更新我们的经典 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 注入保护的最佳方法是什么?