【发布时间】:2019-05-29 15:31:57
【问题描述】:
我正在尝试动态构造一个具有 X 个条件的原始 SQL 查询。我正在使用此页面上的信息:https://docs.microsoft.com/en-us/ef/core/querying/raw-sql
目前我有类似的东西:
String rawQuery = "SELECT * FROM ItemsTable WHERE ";
foreach (f in FilterList) {
rawQuery = rawQuery + String.Format(f.condition, f.userInput);
// f.condition is something like "Name LIKE {0}"
}
var filteredItems = context.ItemsTable
.FromSql(rawQuery)
.ToList();
问题是,我的参数在使用 .FromSql() 时没有被替换,所以我很容易受到 SQL 注入攻击。
有没有办法使用 .FromSql() 来完成这项任务?
或者,还有其他方法可以防止 SQL 注入吗?
【问题讨论】:
-
按照链接中的建议使用传递参数。它甚至声明这样做是为了防止 sql 注入。
标签: c# sql linq entity-framework-core