以下SQL是否容易通过@SearchWord参数进行SQL注入?
我想在FormsOf函数中使用参数,但我发现的唯一指南是在Stack Overflow问题中:How to pass parameter to FormsOf function in sql server
然而,解决方案似乎是使用一些动态SQL,我想知道这是否会受到SQL注入的影响。如果@searchWord包含SQL注入类型字符串,下面的示例会发生什么?这不是问题,因为它仍然在一个参数中,作为参数传递给FREETEXTTABLE吗?
给出的解决方案是:
DECLARE @SearchWord nvarchar(max)
SET @SearchWord = 'tax'
DECLARE @SearchString nvarchar(max)
SET @SearchString = 'FormsOf(INFLECTIONAL, "' + @SearchWord + '")'
SELECT listing_id, RANK, name, address, city, zip, heading, phone
FROM listings a,
FREETEXTTABLE(listings, *, @SearchString)
WHERE [KEY] = a.listing_id
ORDER BY RANK DESC, name
答案 0 :(得分:2)
不,它不容易受到影响。这里没有动态SQL(需要使用EXEC
或sp_executesql
),因此没有用于SQL注入的向量。
为了存在SQL注入漏洞,用户提供的字符串(在本例中为@SearchWord
)实际上必须直接插入到SQL语句的文本中。在这里,它仅用于构造另一个字符串变量,该变量随后用作另一个SQL语句的参数。
如果用户输入“无效”搜索字,即包含单引号的搜索字, <=> ,那么您应该仍然可以逃避任何值传递给@SearchWord
。但它不能用于执行任意SQL。
答案 1 :(得分:1)
我没有对此进行过测试,但我不认为解释器只是将@SearchString
的值粘贴到语句中。它应该使用FREETEXTTABLE期望的规则解析@SearchString
- 这就是其他参数的工作方式。