答案 0 :(得分:1)
注意:
如果开发人员使用EF作为包装器,则很容易实现 ADO.NET周围并使用FromSQL。当然,这不是故意的 EF的正常使用,但我已经看到了-Camilo Terevinto
REF:Raw SQL Queries
另外,虽然不是真正的“ SQL注入”,但由于其目标之一是通过更改原始sql来产生一些意想不到的结果来对数据进行某种程度的更改,因此您还应该注意ASP.NET - Overposting/Mass Assignment Model Binding Security >
直接从链接中获取示例:
您为模型/课程:
public class Person
{
public int ID { get; set; }
public string First { get; set; }
public string Last { get; set; }
public bool IsAdmin { get; set; }
}
Controller
中的某个地方:
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Create(Person person)
{
if (ModelState.IsValid)
{
_context.Add(person);
await _context.SaveChangesAsync();
return RedirectToAction("Index");
}
return View(person);
}
如果理论上的EvilUser发现Person具有“ IsAdmin” 属性,他们可以“ overpost”并将字段添加到HTTP POST和 设置
IsAdmin=true
。 这里的代码中没有任何东西可以防止这种情况。
因此,“邪恶用户”甚至不需要弄清楚sql injection
就能得到一些意想不到的结果。阅读有关防止它的方法的文章(例如BindAttribute
,视图模型)。
高度。
答案 1 :(得分:0)
取决于它的用途。 如果使用LINQ yes,则可以安全地防止SQL INJECTION,因为它将通过SQL参数将所有数据传递到数据库。 LINQ查询不是通过使用字符串操作或串联来组成的,这就是为什么它们不容易受到传统SQL注入攻击的影响。