我正在製作SSRS報告,其存儲過程如下所示。我的用戶需要一個搜索工具,它將在名稱字段中返回所有可能的結果,以便「AD」的名稱應返回「ADAM」和「MADELYN」。我容易受到SQL注入嗎?
我很擔心,因爲我使用字符串連接我的where子句,是有可能,這個存儲過程可以犧牲品SQL注入攻擊:
BEGIN
@location varchar(20),@name varchar(20)
SELECT location, name
FROM table
WHERE (location LIKE @location+'%') AND (name LIKE '%'[email protected]+'%')
END
這段代碼脆弱?而且,如果是這樣,我如何解決它是安全的?
我沒有看到一個大問題。你的參數只有20個字符長,限制了很多問題。在where子句中使用它的方式進一步限制了問題,並且沒有輸入動態SQL,所以我認爲你從這個角度出發是很好的。 – Jesse
您將始終需要清理應用程序級別上的輸入數據 – jonasfh
由於您的位置和名稱是參數,因此您沒有問題。添加'%'for像不會損害任何東西,這是模式和實踐中較舊的鏈接,但它討論了存儲過程和存儲過程與動態SQL(你沒有使用動態SQL,所以你很好)https:// msdn。 microsoft.com/en-us/library/ff648339.aspx?f=255&MSPPError=-2147217396 –