我可以信任 ASP.NET Core 中 IFormFile 的 .Length 属性吗?

Ric*_*ban 8 file-upload asp.net-core

我们有一个API端点,允许用户上传图像;它的参数之一是 IFormFileCollection。

我们想验证文件大小以确保端点没有被滥用,因此我正在检查Length每个属性IFormFile,但我不知道我是否可以信任该属性,即这是否来自请求?它是否被视为“输入” Content-Length

Cod*_*ter 10

如果您有一个IFormFileCollection参数,并且在请求中使用“表单数据”内容类型发送数据,则该参数受到大量难以在线挖掘的管道的绑定 如果您只是调试操作方法接受(或任何集合,实际上)并检查该集合,您将看到上传的文件已保存在服务器的磁盘上。IFormFileCollectionIFormFile

这是因为必须读取整个多部分表单请求的正文以确定有多少文件(如果有)和表单参数,并在读取请求正文时验证请求正文的格式。

所以是的,当您的代码最终到达那里时,您可以信任IFormFile.Length,因为它指向存在并包含那么多字节的本地文件。

但你已经来不及拒绝该请求了,因为它已经被完全阅读了。您最好修复堆栈中较低的速率和大小限制,例如在 Web 服务器或防火墙上。