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

时间:2012-01-23 11:12:40

标签: python http wsgi webob

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

我不是100%明确的是如何限制包含大于指定数量(例如10MB)的文件的请求。如果有人上传了一个大小为几GB的文件,你显然想在它通过服务器的磁盘空间之前阻止该请求吗?

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

2 个答案:

答案 0 :(得分:3)

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

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

  • 查看Content-Length HTTP标头。如果它比你能处理的要大,立即拒绝请求。
  • 在达到限制之前,不要相信标题并开始阅读请求正文。请注意,这不是一个非常聪明的方法,但可以工作。 =)

信任HTTP标头可能会导致一些问题。设置一个发送内容长度为1024的请求,但发送1GB请求正文。如果您的前端服务器信任该标头,它将开始读取此请求并稍后会发现请求主体实际上应该更大。这种情况仍然可能填满您的服务器磁盘,即使是“通过”“太大的检查”的请求。

虽然可能会发生这种情况,但我认为相信Header将是一个很好的起点。

答案 1 :(得分:0)

您可以在WSGI应用程序前使用您可能拥有的HTTP服务器的功能。例如,lighttpd有many options for traffic shaping