使用包含EF时可能的SQL注入?

gsh*_*arp 7 .net c# t-sql entity-framework

我注意到在EF中使用Contains时

.Where(i => myListOfStrings.Contains(i.Value))
Run Code Online (Sandbox Code Playgroud)

生成的SQL看起来像这样

IN ('Value1', 'Value2')
Run Code Online (Sandbox Code Playgroud)

由于值没有参数化,是不是可以注入一些SQL?

Evk*_*Evk 5

它不会只是盲目地从您的Contains. 至少它会转义单引号(通过将它们加倍)。假设您想注入类似 "') OR 1=1--" 的内容,就像评论中建议的那样,假设它将被转换为:

where ... IN ('') OR 1 = 1 -- the rest
Run Code Online (Sandbox Code Playgroud)

但是因为单引号被转义,这将是:

where ... IN (''') OR 1 = 1 --' -- the rest
Run Code Online (Sandbox Code Playgroud)

所以我们在这里是安全的,因为您的整个语句都被视为字符串。