2011-10-29 109 views
0

有人告訴我,如果在C#中使用SqlCommand並且要爲該命令添加參數,它會增加安全性,因爲它可以防止Sql Injection。我想知道這是否是事實。如果是這樣,它如何停止Sql注入,因爲我的理解是,當使用參數時,它只是在Sql命令中的某個點處插入一個字符串。所以這個字符串可以是任何東西,使Sql注入成爲可能,對嗎?SqlCommand參數說明

回答

3

這不是一個簡單的替換。該框架將換碼發送值(尤其是字符串),[作爲RPC調用的一個單獨部分],以便不可能將值作爲代碼執行。

感謝@PanagiotisKanavos的correction(6年後)。

+0

好的,所以框架將刪除刻度標記''內的數字或任何東西? –

+0

不,它將包含勾號作爲查詢的一部分。所以如果你的領域是一個數字,並有這樣的事情。 '+ 0 = 0',那麼整個事件將是參數,並且查詢將會錯誤,而不是要修改查詢的注入意圖。錯誤是你想要的。 –

+2

不,它不會刪除任何內容,只會對它進行編碼,以便在寫入時可以將其存儲在數據庫中。 SqlParameter還關心匹配列存儲的數據類型,並對其進行適當編碼,並檢查綁定條件,如字符串是否適合存放VARCHAR(n)的列。 –