【发布时间】:2019-02-14 19:27:21
【问题描述】:
EF Core 2.1 引发有关 SQL 注入的警告。有我的代码 sn-p 它发生的地方
var query = await _ctx.Set<TABLE>()
.FromSql("Select * from TABLE where Artikelnummer IN (" + string.Join(',', artNum) + ")")
.AsNoTracking()
.Select(z => new
{
z.Artikelnummer,
z.Property
}).ToArrayAsync();
其中artNum(代表Artikel Numbers)是整数数组,如[1,22,34等]。
我无法在FromSql中将artNum作为参数传递,因为会有单引号并且SQL会抛出异常。
我可以将 FromSql 重写为
.Where(x => artNum.Contains(x.Artikelnummer))
但是我的查询比这个更大更复杂,所以 LINQ to Entities 在这种情况下并不好。 应该有那么,问题是如何重写这个查询,这样就不会出现警告?
LINQ to Entities 的执行时间比 LINQ to SQL 长得多,所以这不是解决我的问题的合适方法。
我调查了连接会导致警告,所以应该有没有连接的解决方案。
【问题讨论】:
-
documentaiton 对 SQL 注入非常清楚。我想那里提到的一种方法也应该适用于
IEnumerables。 -
没有办法解决我的问题,因为每次都出现单引号。
-
您是否尝试过使用类似
_ctx.Set<TABLE>().Where(x => artNum.Contains(x.Artikelnummer)).AsNoTracking()..etc..的东西? -
警告不是错误。如果您想查看代码以确保实际上不存在 SQL 注入漏洞,则可以取消或忽略该警告。在这里,由于您连接的是
int列表,而不是string,因此您可以避免 SQL 注入。
标签: c# sql linq asp.net-core-2.1 ef-core-2.1