gpt4 book ai didi

c# - 保护 API 免受 SQL 注入(inject)

转载 作者:行者123 更新时间:2023-11-30 22:56:44 31 4
gpt4 key购买 nike

我正在创建一个 API,下面的方法通过查询参数中的员工姓名或所有员工获取员工。但是,[FromQuery(Name = "name")] 是否可以防止 SQL 注入(inject),不确定这是否是 .NET core 2.2 的默认功能?

[HttpGet]
public IActionResult GetStaff([FromQuery(Name = "name")] string firstName)
{
if (firstName == null)
{
//get all staff
var staff = _repo.GetAllStaff().ToList();
return Ok(staff);
}

if (firstName != null)
{
//get staff by firstName
var staffByName = _repo.GetStaffByName(firstName).ToList();
return Ok(staffByName);
}

return BadRequest("No staff found");
}

存储库中的方法

    public IEnumerable<ApiStaff> GetStaffByName(string name)
{
var staffName = _context.ApiStaff.Where(k => k.FirstName == name);
return staffName;
}

最佳答案

如果您使用的是诸如 Entity Framework 之类的 ORM,那么您的问题并不清楚,但是从命名约定 _context 和 Where linq 查询来看,我猜您是。

ASP.net Core 并没有内置 SQL 注入(inject)预防功能,事实上 Asp.net core does not have request validation built into it anymore .

但是使用 ORM has some natural SQL injection prevention :

LINQ to Entities injection attacks:

Although query composition is possible in LINQ to Entities, it is performed through the object model API. Unlike Entity SQL queries, LINQ to Entities queries are not composed by using string manipulation or concatenation, and they are not susceptible to traditional SQL injection attacks.

如果您选择直接在 ORM 中执行 SQL,则情况并非如此,因此这取决于您如何使用它。

安全应被视为“纵深防御”,在应用程序的每一层或边界添加缓解技术。

您的用例的一个简单示例可能是将名字限制为合理的值,例如不超过 X 个字符(30?),没有数字等,但是对于 internationalization 这说起来容易做起来难。因此,即使在 Entity Framework 中发现了弱点,您也只能通过给他们一个有限的字符集来阻止攻击者来攻击您。

我建议阅读 OWASP's cheat sheet

关于c# - 保护 API 免受 SQL 注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54180543/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com