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限制,检查这些线程:并且。根据您的描述,我想您可能想要。