2010-02-01 17 views
1

以下SQL是否容易通過@SearchWord參數進行SQL注入?FormsOf函數和SQL注入中的參數

我想使用的參數與功能FORMSOF,但唯一的指導,這樣做,我發現在這個堆棧溢出問題: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

不,它不易受影響。這裏沒有動態SQL(這需要使用EXECsp_executesql),所以沒有用於SQL注入的向量。

爲了存在SQL注入漏洞,用戶提供的字符串(本例中爲@SearchWord)實際上必須直接插入到SQL語句的文本中。在這裏,它僅用於構造另一個字符串變量,隨後將其用作另一個SQL語句的參數。

本聲明可以,然而,失敗如果用戶輸入「無效的」搜索詞,即包含單引號的一個,所以你應該還是逃脫任何值傳遞給@SearchWord。但它不能用於執行任意SQL。

1

我沒有測試過這一點,但我不認爲解釋是簡單地粘貼的@SearchString值到語句。它應該使用FREETEXTTABLE期望的規則解析@SearchString - 這是其他參數工作的方式。