2009-02-27 38 views
1

嗨我正在使用數據集,並在該數據集中我有一個表適配器。在我的表適配器中,我使用存儲過程作爲查詢。如果我使用以下行來使用我的表格適配器插入表單數據,是否可以安全地防範SQL注入?謝謝。TableAdapters SQL注入

UserDataSetTableAdapters.UserInformationTableAdapter myFactory = new TestProject.UserDataSetTableAdapters.UserInformationTableAdapter(); 
      myFactory.spTest_InsertUserInformation(id, frmAddress); 

回答

1

簡短的回答:是的:)

更新1:即使你不使用存儲過程和定義的查詢與適配器上的參數,這將是對SQL注入,即選擇F1安全,f2其中f3 = @myparameter ...將使用準備好的查詢。

0

使用SQL Prolier跟蹤進行驗證。如果底層API是安全的,您會看到參數化的T-SQL命令,這些命令沿着sp_executesql的一行。

4

沒有發佈你的存儲過程代碼,沒有辦法真正回答你的問題,但你可以自己回答。


SQL注入攻擊來自用戶輸入的數據,它們會擺動到動態生成和執行的SQL查詢中。使用存儲過程通常通過傳遞參數作爲參數來避免此問題,因此不會動態生成SQL。過程會自動封裝,不會成爲原始SQL查詢文本的一部分。

舉個例子如下:

SELECT * 
FROM myTable 
WHERE myId = @ID; 

作爲參數,你的安全設置@ID爲 「21; DROP TABLE mytable的;」。它會被轉義,整個字符串將與myId進行比較。不過,如果你動態地生成像

string query = "SELECT *\nFROM myTable\nWHERE myId = " + userEnteredText + ";"; 

您的SQL查詢現在你會得到如下:

SELECT * 
FROM myTable 
WHERE myId = 21; DROP TABLE myTable;; 

哎喲。


因此,要回答你的問題:如果基於它的參數和EXEC他們你的存儲過程不動態生成SQL,你應該是安全的。

注意:這當然依賴於您的.NET數據提供程序使用參數調用過程而不生成動態SQL語句。大部分都是這樣做的,但如果您使用的是第三方提供商,則應在確認安全之前仔細檢查。

0

如果使用動態SQL在使用EXEC(@SQL),而不是PROC本身對sp_executesql 與參數那麼你是不是安全的,否則你就是