【问题标题】:Possible SQL Injection when using contains with EF?将包含与 EF 一起使用时可能的 SQL 注入?
【发布时间】:2016-06-08 11:18:20
【问题描述】:

我注意到在 EF 中使用 Contains 时

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

生成的SQL是这样的

IN ('Value1', 'Value2')

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

【问题讨论】:

  • 您从哪里查看生成的 SQL?探查器?我会假设 EF 在传递查询之前对值进行相关的字符串编码。
  • 试试吧!传入类似') OR 1=1--
  • @L-Four 是的,我知道,但如果包含它,它不会创建任何参数。
  • @MurrayFoxcroft 是来自分析器

标签: c# .net entity-framework tsql


【解决方案1】:

它不会只是盲目地从您的Contains 构造 IN 语句。至少它会转义单引号(通过加倍它们)。假设你想像 cmets 中建议的那样注入类似 "') OR 1=1--" 的东西,假设它将被转换为:

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

但是因为单引号被转义了,所以:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-10-01
    • 1970-01-01
    • 2020-11-21
    • 2014-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多