是否可以在使用实体框架的应用程序上执行SQL注入?

时间:2018-07-22 15:48:25

标签: c# entity-framework entity-framework-6 sql-injection

可以Entity Framework被黑客入侵吗?

  

是否可以在使用EF的应用程序上执行 SQL注入

如果是这样,有人可以提供完整示例说明如何完成此操作吗?我在C#中找不到与EF相关的任何内容。

2 个答案:

答案 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注入攻击的影响。