为防止 SQL 注入攻击,可以通过使用参数化查询的方式来将用户输入的参数与 SQL 查询语句分开。
以下是一份使用参数化查询的示例代码:
DECLARE @searchTerm NVARCHAR(50) = 'apple';
DECLARE @sqlCommand NVARCHAR(MAX);
DECLARE @paramDefinition NVARCHAR(500);
SET @sqlCommand = '
SELECT *
FROM Products
WHERE ProductName LIKE @searchTerm';
SET @paramDefinition = '@searchTerm NVARCHAR(50)';
EXECUTE sp_executesql @sqlCommand, @paramDefinition, @searchTerm;
在这个示例中,我们定义了一个名为 @searchTerm 的变量来存储用户输入的搜索条件。我们使用该变量来构建 SQL 查询语句。然后,在使用 EXECUTE sp_executesql 执行该查询时,我们同时传入了 @paramDefinition 参数,该参数定义了 @searchTerm 变量的数据类型和长度。这将确保在执行查询时,用户输入的参数将被正确处理,而不会影响查询结果。
如果我们尝试在输入 @searchTerm 时使用 SQL 注入攻击,例如:' OR 1=1 --,那么查询将会返回与该攻击无关的正确结果。