授权 attribute/middleware 是否可以防止对文件上传的 DOS 攻击?
Does Authorization attribute/middleware prevent DOS attacks on File Upload?
我正在尝试了解是否 .NET Middleware will protect against Denial Of Service attacks on a sensitive area of a system. I can't find the answer in docs such as this。
我设想的攻击是这样的。
- 攻击者获得非 Super-Admin 用户的权限
- 然后他们使用这些凭据向上传控制器发送垃圾邮件。
这是控制器:
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";
}
}
}
因此,如果用户不是 'SuperAdmin',Authorize attribute is ASP.NET Middleware 将退回请求。
我不确定的是 - 整个请求会到达服务器,还是在 header 级别完成。
例如我想上传一个 500MB 的文件。
选项 1
- 已调用上传控制器(例如从浏览器 UI)
- API 收到 headers
- 中间件读取 headers(如果权限不足则拒绝 - 只用了几个字节就做出了这个决定)
- 中间件接受 - 控制器现在接受 500MB 的文件。
- 如果不允许,这意味着只有几个字节的数据传输。
选项 2
- 已调用上传控制器(例如从浏览器 UI)
- 对 API 控制器的整个 500MB+ 请求
- 控制器收到整个有效负载
- 在有效载荷中,检索到header。
- 接受或拒绝(但在做出决定之前已经转移了 500MB)。
显然,选项 2 更容易受到 DOS 攻击,所以我希望它是选项 1,但我找不到答案。
请问这实际上是如何流动的?
HTTP 请求未部分发送,因此整个文件将通过网络。
例如,您可以根据需要根据 body 的内容进行授权(因此不仅加载 headers)。
您可以使用 Fiddler 检查 HTTP request/response,它充当代理,因此您可以看到 sent/received.
的所有内容
编辑:所以不,授权中间件不会阻止 un DOS 攻击。
我正在尝试了解是否 .NET Middleware will protect against Denial Of Service attacks on a sensitive area of a system. I can't find the answer in docs such as this。
我设想的攻击是这样的。
- 攻击者获得非 Super-Admin 用户的权限
- 然后他们使用这些凭据向上传控制器发送垃圾邮件。
这是控制器:
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";
}
}
}
因此,如果用户不是 'SuperAdmin',Authorize attribute is ASP.NET Middleware 将退回请求。
我不确定的是 - 整个请求会到达服务器,还是在 header 级别完成。
例如我想上传一个 500MB 的文件。
选项 1
- 已调用上传控制器(例如从浏览器 UI)
- API 收到 headers
- 中间件读取 headers(如果权限不足则拒绝 - 只用了几个字节就做出了这个决定)
- 中间件接受 - 控制器现在接受 500MB 的文件。
- 如果不允许,这意味着只有几个字节的数据传输。
选项 2
- 已调用上传控制器(例如从浏览器 UI)
- 对 API 控制器的整个 500MB+ 请求
- 控制器收到整个有效负载
- 在有效载荷中,检索到header。
- 接受或拒绝(但在做出决定之前已经转移了 500MB)。
显然,选项 2 更容易受到 DOS 攻击,所以我希望它是选项 1,但我找不到答案。
请问这实际上是如何流动的?
HTTP 请求未部分发送,因此整个文件将通过网络。 例如,您可以根据需要根据 body 的内容进行授权(因此不仅加载 headers)。
您可以使用 Fiddler 检查 HTTP request/response,它充当代理,因此您可以看到 sent/received.
的所有内容编辑:所以不,授权中间件不会阻止 un DOS 攻击。