2013-04-24 88 views
1

道歉,如果這似乎是一個愚蠢的問題,但如何使用參數抵禦SQL注入和什麼有關最佳做法,以T-SQL:抵禦T-SQL注入

例如:這是最好的做法呢?

SqlCommand SqlCmd = new SqlCommand("SQL Command @X ....... @Y"); 
SqlCmd.CommandType = CommandType.Text; 
SqlCmd.Parameters.AddWithValue("@X", SqlDbType.VarChar).Value = X; 
SqlCmd.Parameters.AddWithValue("@Y", SqlDbType.date).Value = Y; 
SqlCmd.Connection = ConnectionString; 
+0

謝謝,但我也對一般最佳實踐感興趣,並且評論提到了溢出問題。等等。? – TheIdiot 2013-04-24 22:19:36

回答

1

最佳做法是使用SQL參數。使用SqlParameterCollection(如你的例子:SqlCmd.Parameters)將自動爲您提供:

  1. 類型檢查
  2. 長度驗證
  3. 輸入將被視爲文字值而不是可執行代碼的特殊
  4. 處理通常涉及SQL注入攻擊的字符

There are some additional best practices包括:

  • 約束和淨化輸入數據
  • 使用數據庫中的
  • 避免了受限制的權限披露數據庫錯誤信息

你會發現在這個OWASP SQL Injection Prevention Cheat Sheet進一步說明這些最佳實踐的賬戶。

+0

謝謝最後一個鏈接特別有用。 – TheIdiot 2013-04-24 23:02:43

2

是的,這段代碼是安全的SQL注入。

原因是,當使用參數處理您的項目作爲值傳遞給您的服務器,他們將被解釋爲這樣。

如果要構造一個字符串,SQL無法知道該值是什麼以及該查詢是什麼,並且必須純粹依賴語法。

相關問題