2016-06-08 53 views
6

我注意到,當使用包含在EF使用包含EF時可能的SQL注入?

.Where(i => myListOfStrings.Contains(i.Value)) 

生成的SQL看起來像這樣

IN ('Value1', 'Value2') 

由於值不是參數,是不是有可能注入一些SQL?

+0

你從哪裏查看生成的SQL?探查?我會假設EF在傳遞查詢之前正在對值進行相關的字符串編碼。 –

+0

試試吧!傳入類似'')OR 1 = 1 - ' – Rodders

+0

http://stackoverflow.com/questions/473173/will-using-linq-to-sql-help-prevent-sql-injection –

回答

3

它不會從你的Contains不自覺地構造IN聲明。至少它會逃脫單引號(通過加倍)。假設你要注入類似「')OR 1 = 1--」之類的建議意見,假設它會被轉換爲:

where ... IN ('') OR 1 = 1 -- the rest 

但因爲單引號被轉義,這將是:

where ... IN (''') OR 1 = 1 --' -- the rest 

所以我們在這裏很安全,因爲你的整個陳述被視爲字符串。