2010-09-29 133 views
9

這是LINQ統計容易受SQL注入?此LINQ語句是否容易受到SQL注入的影響?

var result = from b in context.tests 
    where b.id == inputTextBox.Text 
    select b; 

其中上下文是一個實體和測試是一個表。 我試圖學習LINQ,我認爲它的好處是它不容易被sql注入,但是我看到的一些東西有不同的說法。我需要參數化這個LINQ語句以使它更安全嗎?如果是這樣,怎麼樣?

也將這被認爲是LINQ到SQL或LINQ實體?

回答

31

簡短的回答:LINQ是不容易受到SQL注入。

龍答:

LINQ是不是像SQL。在後臺有一個完整的庫,它可以從代碼中編譯器生成的表達式樹構建SQL,將結果映射到對象 - 當然,這樣做會使得事情變得安全。

LINQ to SQL FAQ

問:如何是LINQ to SQL的保護 SQL注入攻擊?

答:SQL注入對於通過連接用戶 輸入形成的傳統SQL 存在重大風險。 LINQ to SQL通過在 查詢中使用SqlParameter避免了這樣的 注入。用戶輸入變爲 參數值。這種方法 可防止從客戶輸入中使用惡意命令 。

在內部,它意味着當LINQ到SQL查詢數據庫,而不是使用簡單的值,它通過它們作爲SQL參數,這意味着它們可以從未被作爲由數據庫的可執行代碼進行處理。大多數(如果不是全部的話)ORM映射器也是如此。

比較這兩種方法(完全僞代碼):

string name = "' ; DROP DATABASE master --" 
run ("SELECT * FROM Authors WHERE Name = '" + name + "'") // oops! 

// now we'd better use parameters 
SqlParameter name = new SqlParameter ("@name", "' ; DROP DATABASE master --") 
run ("SELECT * FROM Authors WHERE Name = @name", name) // this is pretty safe 

我建議你更深入地研究什麼LINQ語句的實際含義和何時以及如何得到它們轉換爲真正的SQL。您可能想了解LINQ standard query operator translationdeferred executiondifferent LINQ providers等等。在LINQ的情況下,就像任何抽象技術一樣,這對於瞭解幕後發生的事情來說既迷人又非常有用。

P.S.每當我看到一個關於SQL注入的問題時,我都忍不住想起這個webcomic。

sql injection

+0

把它放在報價塊而不是代碼塊 – msarchet 2010-09-29 20:59:12

+0

是的,錯過了按鈕。感謝您指出。 – 2010-09-29 20:59:44

+1

但是,如果您使用Linq來連接字符串和輸入,您可能仍然存在漏洞。 – Oded 2010-09-29 21:02:09

2

編號LINQ to Entities和LINQ to SQL處理生成SQL查詢以避免SQL注入。如果您想要查看使用各種輸入運行此查詢時生成的SQL語句,則可以使用LINQPad。

無論是LINQ to SQL還是LINQ to Entities,取決於您的context對象是什麼,並且無法從此代碼段中確定。

如果您使用ExecuteQuery方法來運行自定義SQL查詢(see here),唯一需要擔心LINQ中的SQL注入的時間。但是在那個時候,你已經離開了語言一體化查詢,並回到了生成你自己的字符串的世界。

2

LINQ使用參數化查詢,所以它通常不會受到SQL注入的影響。舉個例子,你的例子不是脆弱的。

2

LINQ to Entities提供程序使用參數化查詢並對SQL注入完全安全。

1

的LINQ to SQL生成參數化查詢,以便它可以防止SQL注入攻擊

0

的Linq paramaterizes所有查詢,因此不容易受到SQL注入攻擊。但是,您仍然應該驗證所有的用戶輸入,否則您將面臨跨站腳本攻擊。

+0

儘管我同意用戶輸入應該被驗證,但是我沒有看到什麼跨站點腳本攻擊與它有關。 – StriplingWarrior 2010-09-29 21:05:17

+0

那麼這取決於實際上對數據做了什麼,如果直接從數據庫中顯示數據,任何自定義腳本都將/可能被執行。 – Padwah 2010-09-29 21:12:48

+0

哦,所以你說的是,如果你在瀏覽器中顯示用戶輸入的文本時不逃避HTML,對吧?這不是我認爲驗證用戶輸入的分類,但我明白你的意思。 – StriplingWarrior 2010-09-29 21:22:53

相關問題