FormsOf函数和SQL注入中的参数

时间:2010-02-01 12:00:45

标签: tsql full-text-search sql-injection formsof

以下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

2 个答案:

答案 0 :(得分:2)

不,它不容易受到影响。这里没有动态SQL(需要使用EXECsp_executesql),因此没有用于SQL注入的向量。

为了存在SQL注入漏洞,用户提供的字符串(在本例中为@SearchWord)实际上必须直接插入到SQL语句的文本中。在这里,它仅用于构造另一个字符串变量,该变量随后用作另一个SQL语句的参数。

如果用户输入“无效”搜索字,即包含单引号的搜索字, <=> ,那么您应该仍然可以逃避任何值传递给@SearchWord。但它不能用于执行任意SQL。

答案 1 :(得分:1)

我没有对此进行过测试,但我不认为解释器只是将@SearchString的值粘贴到语句中。它应该使用FREETEXTTABLE期望的规则解析@SearchString - 这就是其他参数的工作方式。