【问题标题】:Parameters in the FormsOf function and SQL injectionFormsOf 函数中的参数和 SQL 注入
【发布时间】:2011-01-11 16:44:12
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

      此语句可以,但是,如果用户输入“无效”搜索词,即包含单引号的搜索词,则 fail,因此您可能仍然应该转义任何值传递给@SearchWord。但不能用于执行任意SQL。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-11-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-01-10
        • 1970-01-01
        • 2014-04-29
        • 2014-06-16
        相关资源
        最近更新 更多