C# 授权属性/中间件是否能防止文件上传时的DOS攻击?
我正在试图了解是否可以保护系统的敏感区域免受攻击。我在诸如的文档中找不到答案 我设想的攻击就是这样C# 授权属性/中间件是否能防止文件上传时的DOS攻击?,c#,asp.net,asp.net-mvc,asp.net-core,asp.net-core-middleware,C#,Asp.net,Asp.net Mvc,Asp.net Core,Asp.net Core Middleware,我正在试图了解是否可以保护系统的敏感区域免受攻击。我在诸如的文档中找不到答案 我设想的攻击就是这样 攻击者获得非超级管理员用户的权限 然后,他们使用这些凭据向上载控制器发送垃圾邮件 这是控制器: using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using System; using System.Threading.Tasks; namespace Test.controllers {
- 攻击者获得非超级管理员用户的权限
- 然后,他们使用这些凭据向上载控制器发送垃圾邮件
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using System;
using System.Threading.Tasks;
namespace Test.controllers
{
[Authorize(Policy = "SuperAdmin")]
[ApiController]
public class UploadController : Controller
{
public UploadController()
{
}
[HttpPost, Route("upload")]
public async Task<ActionResult<string>> Upload()
{
try
{
// Exta checks
var file = Request.Form.Files[0];
// Do something with the file
}
catch (Exception ex)
{
// ...
}
return "OK";
}
}
}
使用Microsoft.AspNetCore.Authorization;
使用Microsoft.AspNetCore.Mvc;
使用制度;
使用System.Threading.Tasks;
命名空间Test.controllers
{
[授权(Policy=“SuperAdmin”)]
[ApiController]
公共类上载控制器:控制器
{
公共上传控制器()
{
}
[HttpPost,路由(“上传”)]
公共异步任务属性是,如果用户不是“超级管理员”,则将反弹请求
但我不确定的是,整个请求是否会到达服务器,或者这是在头级别完成的
例如,我想上传一个500MB的文件
选项1
- 调用上载控制器(例如,从浏览器UI)
- API接收报头
- 中间件读取头文件(如果权限不足,则拒绝-仅需几个字节即可做出此决定)
- 中间件接受-控制器现在接受500MB文件
- 如果不允许,这意味着只需传输几个字节的数据
选项2
- 调用上载控制器(例如,从浏览器UI)
- 对API控制器的整个500MB+请求
- 控制器接收整个有效载荷
- 在有效负载中,检索报头
- 接受或拒绝(但在做出决定之前已传输500MB)
显然,选项2更容易受到拒绝服务攻击,所以我希望是选项1,但我找不到答案
这实际上是如何进行的?HTTP请求没有部分发送,因此整个文件将通过网络传输。
举例来说,如果需要,您可以根据正文的内容进行授权(这样不仅可以加载标题)
您可以使用Fiddler检查HTTP请求/响应,它充当代理,因此您可以查看发送/接收的所有内容
编辑:因此,不,授权中间件不会阻止un-DOS攻击。不确定DOS。但在单个请求中上载500MB可能不是进行文件上载的最佳方式。流式多部分上载很可能更适合您的使用情形。(如果使用云存储,则始终可以直接上载到云存储。)关于DOS攻击,据我所知,.net核心中间件不包含此中间件。为了防止DOS攻击,您可以尝试使用动态IP限制,检查这些线程:并且。根据您的描述,我想您可能想要。