C# 是否可以在使用实体框架的应用程序上执行SQL注入?
会被黑客攻击吗 可以在使用EF的应用程序上执行SQL注入吗C# 是否可以在使用实体框架的应用程序上执行SQL注入?,c#,entity-framework,entity-framework-6,sql-injection,C#,Entity Framework,Entity Framework 6,Sql Injection,会被黑客攻击吗 可以在使用EF的应用程序上执行SQL注入吗 如果是这样的话,有人能提供一个完整的例子说明如何做到这一点吗?我在C#中找不到任何特定于EF的内容。取决于它的使用方法。 如果您使用LINQ yes,那么它对SQL注入是安全的,因为它通过SQL参数将所有数据传递到数据库。LINQ查询不是通过使用字符串操作或串联组成的,这就是为什么它们不易受到传统SQL注入攻击的原因。取决于它的使用方式。 如果您使用LINQ yes,那么它对SQL注入是安全的,因为它通过SQL参数将所有数据传递到数据库
如果是这样的话,有人能提供一个完整的例子说明如何做到这一点吗?我在C#中找不到任何特定于EF的内容。取决于它的使用方法。
如果您使用LINQ yes,那么它对SQL注入是安全的,因为它通过SQL参数将所有数据传递到数据库。LINQ查询不是通过使用字符串操作或串联组成的,这就是为什么它们不易受到传统SQL注入攻击的原因。取决于它的使用方式。 如果您使用LINQ yes,那么它对SQL注入是安全的,因为它通过SQL参数将所有数据传递到数据库。LINQ查询不是通过使用字符串操作或连接来组成的,这就是为什么它们不易受到传统SQL注入攻击的原因。注意以下几点:
如果开发人员使用EF作为包装器,这是很容易做到的 围绕ADO.NET并使用FromSQL。当然,这不是预期的结果 也不是EF的正常使用,但我见过它–Camilo Terevinto 参考:
此外,虽然不是真正的“sql注入”,但由于这样做的目标之一是通过改变原始sql来产生一些意外的结果,从而在某种程度上改变数据,因此您还应该知道 直接从link获取的样本: 您的模型/类别:
public class Person
{
public int ID { get; set; }
public string First { get; set; }
public string Last { get; set; }
public bool IsAdmin { get; set; }
}
在控制器中的某个地方
:
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Create(Person person)
{
if (ModelState.IsValid)
{
_context.Add(person);
await _context.SaveChangesAsync();
return RedirectToAction("Index");
}
return View(person);
}
[HttpPost]
[ValidateAntiForgeryToken]
公共异步任务创建(个人)
{
if(ModelState.IsValid)
{
_上下文。添加(人);
wait_context.SaveChangesAsync();
返回操作(“索引”);
}
返回视图(人);
}
如果用户发现此人有“iAdmin”
属性,则可以“overpost”并向HTTP POST和
设置IsAdmin=true
这里的代码中没有任何东西可以阻止这种情况发生
所以“邪恶用户”甚至不需要计算出sql注入
来产生一些意外的结果。阅读有关预防方法的文章(例如,BindAttribute
,查看模型)
Hth.请注意:
如果开发人员使用EF作为包装器,这是很容易做到的 围绕ADO.NET并使用FromSQL。当然,这不是预期的结果 也不是EF的正常使用,但我见过它–Camilo Terevinto 参考:
此外,虽然不是真正的“sql注入”,但由于这样做的目标之一是通过改变原始sql来产生一些意外的结果,从而在某种程度上改变数据,因此您还应该知道 直接从link获取的样本: 您的模型/类别:
public class Person
{
public int ID { get; set; }
public string First { get; set; }
public string Last { get; set; }
public bool IsAdmin { get; set; }
}
在控制器中的某个地方
:
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Create(Person person)
{
if (ModelState.IsValid)
{
_context.Add(person);
await _context.SaveChangesAsync();
return RedirectToAction("Index");
}
return View(person);
}
[HttpPost]
[ValidateAntiForgeryToken]
公共异步任务创建(个人)
{
if(ModelState.IsValid)
{
_上下文。添加(人);
wait_context.SaveChangesAsync();
返回操作(“索引”);
}
返回视图(人);
}
如果用户发现此人有“iAdmin”
属性,则可以“overpost”并向HTTP POST和
设置IsAdmin=true
这里的代码中没有任何东西可以阻止这种情况发生
所以“邪恶用户”甚至不需要计算出sql注入
来产生一些意外的结果。阅读有关预防方法的文章(例如,BindAttribute
,查看模型)
Hth.如果开发人员使用EF作为ADO.NET的包装器,并使用SQL中的
,这是很容易做到的。当然,这不是EF的预期用途,也不是正常用途,但我已经看到,如果开发人员使用EF作为ADO.NET的包装器,并使用FromSQL
,这是很容易实现的。当然,这不是EF的预期用途,也不是正常用途,但我见过它。我不认为,IsAdmin
劫持与SQL注入是一样的,它纯粹是缺乏业务逻辑验证失败和并发控制,xss等。正如我所说的@AkashKava,“这不是真正的SQL注入”。最后,它完成了一些sql注入可以/将要完成的事情,或者像OP所要求的那样“被黑客攻击”…我不认为IsAdmin
劫持与sql注入是一样的,它纯粹是缺少业务逻辑验证失败和并发控制、xss等。@AkashKava就像我说的,“这不是真正的sql注入”。最后,它完成了一些sql注入可以/将要完成的事情,或者按照OP的要求进行“黑客攻击”。。。