2010-07-27 80 views

回答

12

當您使用參數時,它們通常不會首先作爲文本發送。他們可以使用數據庫的本地有線協議。如果參數本身是一個文本參數,那麼它通常會被封裝在協議中,以便數據庫知道它是一個參數而不是SQL。

雖然我想供應商可能只是將參數轉換爲完整的SQL語句,這將是一個可怕的做事方式。

所以基本上「是」 - 參數化查詢是從SQL注入攻擊安全有效,只要你沒有存儲動態執行參數,作爲SQL等程序

2

當您使用參數,NET的SQL客戶端會將參數值發送到原始TDS流中的SQL服務器。

但是,這並不能保護您免受不良SQL影響。
如果你的SQL調用EXECUTE的字符串包含一個連接參數,那麼你仍然是脆弱的。

0

就字符串值而言,是的 - .NET會將它們轉義給您,您可以通過嘗試在表中找到值 - 「comment」來查看這些值,這會破壞連接的語句,但哪些工作正常用參數化查詢。

正如喬恩所說,儘管像數字和日期這樣的東西將會以他們的原生格式發送,這樣更安全/更快。

+1

我不確定我會說他們真的被*轉義*這樣 - 他們很可能被封裝在這樣一種方式,以消除轉義的要求。它更可能是「接下來的20個字節形成以UTF-8編碼的字符串參數」 - 如果該數據包含引號等,則無關緊要,因爲它不會被視爲SQL。 – 2010-07-27 15:33:57

+0

事實上 - 「封裝」是一種更加準確的說法,因爲「解析」只是解析器具有不能使用的特殊字符時才執行的操作,在這種情況下不適用。 – SqlRyan 2010-07-27 15:39:40