2010-08-13 77 views
5

是否有可能使用完全LinqToSQL或Entity Framewok遭受SQL注入的項目。實體框架,LinqToSQL和sql注入

我認爲這可能不是因爲ORM生成的SQL應該是免費的sql注入。但我不確定。

+1

重複動態SQL存儲過程http://stackoverflow.com/questions/473173/will-using-linq-to-sql-help-prevent-sql -injection – 2010-08-13 04:14:54

+1

不完全重複,因爲這也要求實體框架。此外,答案實際上是說在某些情況下可能會發生攻擊 – 2010-08-13 04:36:03

回答

10

當您按照預期使用這些框架時,即直接使用這些實體/表,那麼沒有。所有字符串比較(即where name = 'smith')都被參數化。

唯一脆弱點是:

  • 任何字符串可以直接抵靠的上下文中執行。 dbContext.ExecuteQuery();與任何種類的破壞性字符串。

  • 執行使用任何給定的參數的

+1

VS2012開箱即用。 _其中(a => a.column ==「Quote'」)_確實轉化爲綁定var _ @ 1 = [Extent1]。[column] _。和_ Where(a => a.column!=「Quote'」)_翻譯成_ N'Quote'''= [Extent1]。[column] _ – 2013-04-08 20:59:54

3

「這取決於」。

針對L2S或EF實體的簡單LINQ查詢是注入安全的,但您始終可以調用不是注入安全的存儲過程或函數。

這顯然是一個邊緣情況,但是它發生在人們編寫SPs /注入時打開的函數(使用proc中的參數值構成SQL中的字符串)。