代码之家  ›  专栏  ›  技术社区  ›  Yusha

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

  •  0
  • Yusha  · 技术社区  · 6 年前

    罐头 Entity Framework 被黑了?

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

    如果是的话,有人能提供一个完整的例子来说明如何做到这一点吗我在C#里找不到任何与EF有关的东西。

    2 回复  |  直到 6 年前
        1
  •  1
  •   EdSF    6 年前

    请注意:

    如果开发人员使用EF作为包装器,则很容易实现 围绕ADO.NET使用FromSQL当然,这不是我们想要的 也不能正常使用EF,但我见过它

    裁判: 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);
    }
    

    如果一个理论上的恶魔发现这个人有一个“IsAdmin” 属性,它们可以“超额定价”并将字段添加到HTTP POST和 设置 IsAdmin=true . 这里的代码没有什么可以阻止 .

    所以“邪恶用户”甚至不需要找出 sql injection 做一些意想不到的结果阅读这篇关于如何预防的文章(例如。 BindAttribute ,查看模型)。

    哦。

        2
  •  0
  •   Just Fair    6 年前

    取决于它的用途。 如果使用LINQ yes,它就可以安全地防止SQL注入,因为它通过SQL参数将所有数据传递到数据库LINQ查询不是由字符串操作或连接组成的,这就是为什么它们不易受到传统SQL注入攻击的原因。