1

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

2 回答 2

2

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

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

This statement can, however, fail if the user inputs an "invalid" search word, i.e. one containing single quotes, so you should probably still escape whatever value is passed to @SearchWord. But it cannot be used to execute arbitrary SQL.

于 2010-04-07T15:03:19.437 回答
1

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

于 2010-04-07T14:56:28.000 回答