【发布时间】:2020-06-08 16:32:21
【问题描述】:
我想使用允许我使用 Like 子句的 EF FromSqlInterpolated 或 FromSqlRaw 创建查询,但我不知道在不将应用程序打开到 SqlInjection 攻击的情况下执行此操作的正确方法是什么。 第一种方法将我带到以下代码
var results = _context.Categories.FromSqlInterpolated(
$"Select * from Category where name like {"%" + partialName + "%"}");
第一次测试运行良好,它在提供预期字符串时返回结果,当我提供类似 ';select * from Category Where name='Notes'--%'; 的内容时不返回任何内容
我仍然对 SqlInjection 知之甚少,至少对于前面显示的查询还不够安全。
有人知道查询是否安全,或者是否有正确的方法吗?
谢谢
【问题讨论】:
-
FromSqlInterpolated应该参数化您的参数属性。来自the doc:您提供的任何插值参数值都将自动转换为 DbParameter -
@ESG 所以这意味着它是安全的?我使用日志尝试查看最终的Sql,但我得到的结果是
Select * from Category where name like @p0,这不是最终查询 -
我想我上一个问题的答案是肯定的,一旦它是一个参数,stackoverflow.com/questions/23256298/… 是安全的
-
@Juan,语法保持不变,无论您使用哪种方法,您都需要用
%字符包装sql 参数或插值以使其工作。
标签: entity-framework .net-core sql-injection