您如何限制wsgi中的大文件上传?

Gro*_*ady 5 python wsgi http webob

我试图了解在wsgi应用程序中安全处理文件上传的最佳方法。似乎很多解决方案都涉及使用cgi模块中的FieldStorage来解析表单数据。据我对FieldStorage的了解,它通过将数据流传输到临时文件中来在幕后执行一些“魔术”操作。

我还不是100%清楚的是如何限制包含大于指定数量(例如10MB)的文件的请求。如果有人上载了一个大小为GB的文件,您显然希望在该请求通过服务器磁盘空间之前阻止该请求,对吗?

限制wsgi应用程序中文件上传的最佳方法是什么?

小智 3

这取决于您的前端服务器。如果它有任何配置可以在大请求进入您的应用程序之前阻止大请求,请使用它。

如果你想用你的代码阻止它,我看到两种方法:

  • 查看 Content-Length HTTP 标头。如果它超出了您的处理能力,请立即拒绝该请求。
  • 不要相信标头并开始读取请求正文,直到达到限制。请注意,这不是一个非常聪明的方法,但可以工作。=)

信任 HTTP 标头可能会导致一些问题。假设某人发送了一个 Content-Length: 1024 的请求,但发送了 1GB 的请求正文。如果您的前端服务器信任标头,它将开始读取此请求,并稍后发现请求正文实际上比应有的大得多。这种情况仍然可能会填满您的服务器磁盘,即使是“通过”“太大检查”的请求。

尽管这种情况可能会发生,但我认为信任标题将是一个很好的起点。