我注意到在EF中使用Contains时
.Where(i => myListOfStrings.Contains(i.Value))
生成的SQL看起来像这样
IN ('Value1', 'Value2')
由于这些值没有参数化,是不是可以注入一些SQL?
答案 0 :(得分:4)
它不会盲目地从你的Contains
构建IN语句。至少它会逃脱单引号(通过加倍)。假设您要注入类似"')OR 1 = 1 - "如评论中建议的那样,假设它将被转换为:
where ... IN ('') OR 1 = 1 -- the rest
但是因为单引号被转义为:
where ... IN (''') OR 1 = 1 --' -- the rest
所以我们在这里很安全,因为你的整个陈述被视为字符串。