我們正在使用引用MSSQL中的存儲過程的第三方產品。該存儲過程看起來是這樣的:這是否容易受到SQL注入?
CREATE PROCEDURE [dbo].[example]
@a nvarchar(255)
AS
BEGIN
SET NOCOUNT ON;
DECLARE @strSQL nvarchar(3000)
SET @strSQL = 'SELECT * FROM test WHERE x = ''1'''
IF IsNull(@a, '') <> ''
SET @strSQL = @strSQL + ' AND a = ''' + @a + ''''
EXEC(@strSQL)
END
此存儲過程實際上並不輸出其結果到網站,但我仍然肯定,這是容易受到SQL注入。我可以輸入t'+'est並獲得與輸入測試相同的結果。
我們顯然需要讓他們改變這一點,但我需要先證明它是一個問題。我怎樣才能做一些事情,例如通過傳遞SQL作爲@a來插入一行到表中?如果我做
'; INSERT INTO blah VALUES('test')
然後我得到:
Incorrect syntax near ';'.
它幾乎看起來像SQL自動防止分號被輸入?這是SQL2012 – JoeS
啊,修復它 - 謝謝。 – JoeS