asp.net-core-mvc - ASP.NET Core 如何通过限制请求大小来防止 DDoS 攻击?
问题描述
我最近创建了一个 API,允许上传视频和音频文件,它工作正常,直到一位客户上传了一个大视频,我收到了这个错误:
未能读取申请表。超过多部分正文长度限制 134217728。
从许多帖子中可以明显看出,请求大小限制背后的理念是减少 DDoS 攻击的机会。(如果我错了,请纠正我)。
- 如果我不限制文件上传到我的网络服务器的最大请求长度,我会打开哪些安全漏洞?
- https://manage.accuwebhosting.com/knowledgebase/2997/ASPNet-Error--Maximum-request-length-exceeded.html
但是,我自己上传了一个大视频,并在本地 PC 和服务器上观看了带宽。我有这个应用程序的 VPS,我可以使用任务管理器的性能选项卡,通过选择以太网并查看发送和接收图表来查看带宽。
关键是,当我上传文件时,我看到高流量持续了几分钟,然后我看到了那个错误。这意味着即使 ASP.NET Core 拒绝请求,服务器的资源也会被消耗。
所以,我不明白这部分。ASP.NET Core 如何通过限制请求大小来减少 DoS 或 DDoS 攻击的机会,而实际占用带宽?multipart/form-data
如果请求有效负载/正文太大,甚至不消耗带宽,则逻辑方法是从一开始就删除内容类型的请求。
解决方案
Dotnet 只能通过上传文件来知道文件的大小(在您的示例中消耗带宽)。
解决这个问题的方法是为上传文件的大小设置一个较小的限制。
dotnet 的工作方式是流式传输文件(一点一点地处理它)。一旦达到最大上传大小,它将返回错误。
没错,这并不能阻止攻击者上传许多大文件 - dotnet 仍然必须上传/流式传输它们,直到达到最大大小。减轻此类攻击的方法是通过其他方式 - 速率限制、IP 阻塞、CDN 上的 DDoS 保护等
推荐阅读
- html - 在 CSS 中创建饮水罐/瓶子对象
- model-view-controller - Kentico 12 带有页面构建器和基本小部件的空 MVC 站点模板?
- webview - Android WebView 错误 - 不允许沙盒 - 但在 Chrome 上工作正常
- function - 获取数组中返回的另一个文件中的函数值
- r - 计算数据框中所有可能的行比率
- ruby-on-rails - Rails 资产 URL 有效,但资产路径无效
- flutter - 如何在不对齐下拉图标和文本的情况下增加 DropDownButton 的大小?
- stm32 - 使用STM32F3制作OBD-II阅读器
- javascript - 导航栏:当我点击它们时选项卡图标消失
- python - 如何使用 keras 从函数返回损失图并将它们打印为子图?