保护 Puma/rails 免受大型有效载荷攻击(类似于 LimitRequestBody)?

Protecting Puma/rails against large form payload attacks (something like LimitRequestBody)?

我想我想限制可以达到 Rails 4 应用程序的最大文件大小和表单有效负载,该应用程序在 Heroku 上与 puma 应用程序服务器一起托管。我还想在这些请求完成之前终止它们以释放服务器资源。

我假设这不能在 Rack 中完成,因为它在请求完成上传后执行?

考虑到这一点,这似乎是网络服务器的工作,但我在 Puma 中找不到提及这一点。它是否有我错过的处理此类事情的机制?

或者,使用 nginx 或 apache 的 phusion passenger 会更好地处理这个问题吗?

http://httpd.apache.org/docs/1.3/mod/core.html#limitrequestbody http://www.cyberciti.biz/faq/apache-limiting-upload-size/

为什么关心:

奖励积分:下一步似乎是在防火墙中临时禁止屡犯者,这样他们就无法访问 Web 服务器。在 Heroku 上,哪些技术对此有好处?

编辑:相关的其他线程 Protect yourself against Dos attacks

鉴于您正在谈论在 nginx 或 apahce、and/or passenger 或 heroku 之间切换,听起来您仍在为此 feature/app 选择堆栈。

提前解决这个问题的最佳方法是使用 client side validation of file sizes。很明显,如果你担心受到攻击,有人很容易绕过它。因此,另一种选择是从客户端将文件上传到 S3,并为 Rails 应用程序设置回调系统。这使流量远离您的主要 Web 服务器,并允许您只处理您认为 "safe".

的文件

最后,如果您选择让用户上传到您的服务器,您提到了 nginx 和 apahce 为您提供的文件大小限制,heroku has a 30MB limit and 30sec timeout for their systems. If you're seeing repeat large size upload offenders and need to throttle the number of requests and/or ban users, you'll want to use Rack::Attack。我用了 gem 一吨。它使用起来很简单,并且对您所说的很有效。

像这样的下一个级别是网络级别的阻塞,这是 Heroku 永远无法做到的,因此您必须推出自己的服务器;如果我们谈论网络级安全和攻击缓解,我的建议是聘请一位知道如何处理的系统管理员!


顺便说一句,我很高兴您从一开始就考虑安全性,但是为滥用文件上传的人设计感觉像是过早的优化(显然对于您正在构建的应用程序类型的不同程度) .