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

时间:2015-10-18 19:25:32

标签: ruby-on-rails ruby heroku puma denial-of-service

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

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

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

另外,使用nginx或apache的phusion乘客会更好地处理这个问题吗?

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

为什么要关心:

  • 由于大型文本变成大红宝石字符串而耗尽的记忆
  • cpu浪费扫描非常大的字符串进行sql转义或html转义或应用程序验证
  • 服务器无法接受新连接,因为客户端上传大量文件(或大型表单数据)的积压很多

奖励积分:下一步似乎是在防火墙中临时禁止重复违规者,这样他们就无法点击网络服务器。在Heroku上哪些技术有用?

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

1 个答案:

答案 0 :(得分:1)

听起来你还在为这个功能/应用程序选择堆栈,因为你正在谈论在nginx或apahce,和/或乘客或heroku之间切换。

提前解决此问题的最佳方法是使用client side validation of file sizes。现在很明显,如果你担心遭到攻击,那么有人可以轻易绕过这一点。所以另一个选择是从客户端将文件上传到S3,并为您的Rails应用程序设置回调系统。这可以保持主Web服务器的流量,并允许您只处理您认为“安全”的文件。

最后,如果您选择将用户上传到您的服务器,您已经提到了nginx& apahce为您提供文件大小heroku has a 30MB limit and 30sec timeout for their systems。如果您看到重复的大型上传违规者并且需要限制请求数量和/或禁止用户,则您需要使用Rack::Attack。我已经使用了宝石一吨。它很容易使用,并且对你所说的内容有效。

从这样的事情开始的下一个级别是网络级别的阻止,这是Heroku永远无法获得的,所以你必须自己推出自己的服务器;如果我们谈论网络级别的安全性和攻击缓解,我的建议是雇用一个知道如何处理它的系统管理员!

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