2015-10-18 109 views
0

我想我想限制的最大文件大小和形式的有效载荷,可以到达一个Rails 4应用程序,托管在Heroku与美洲狮应用服务器。我还想在完成释放服务器资源之前终止这些请求。保护Puma/rails抵御大型有效载荷攻击(类似LimitRequestBody)?

我假设这不能在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逃逸或应用验证
  • 由于大量客户端上传大量文件(或巨大的表单数据),服务器无法接受新连接

加分:下一步似乎是临时禁止在防火墙中重复违规者,以至于他们无法访问Web服务器。哪些技术对Heroku有好处?

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

回答

1

这听起来像你还在为选择考虑到你说的nginx或Apahce的,和/或乘客或Heroku的切换这一功能/应用程序堆栈。

提前对抗此问题的最佳方法是使用client side validation of file sizes。现在显然,如果你担心发作,很容易有人绕过这个。因此,另一种选择是将文件从客户端上传到S3,并为您的Rails应用程序设置回调系统。这可以让您的主要网络服务器保持流量,并且只允许您处理您认为“安全”的文件。

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

从这样的事情发展到下一个层面,在网络层面上阻塞你永远无法使用Heroku,所以你必须推出自己的服务器;如果我们正在谈论网络级安全和攻击缓解,我的建议是聘请一个知道如何处理这个问题的系统管理员!


顺便说一句,我很高兴,你从一开始就想着安全,但设计的人滥用文件上传感觉就像过早优化(显然是不同的,你是什么类型的应用程序的度建造)。

+1

感谢您的帮助加文! 这是为了降低实时应用程序的风险。我们不打算招聘或使用专家。安全是一个持续存在的问题,但我们的手段有限,对问题的掌握程度有限。 正如您所提到的客户端验证更多的是UI/UX功能,但是Heroku的请求限制,并与您的S3建议帮助。 架攻击比处理错误的请求更好,但我宁愿反向代理删除它们。 Heroku没有公开 防火墙或SDN API,所以我猜我们运气不好。 我接受你的答案,因为它有帮助,并让我重新思考。 – nruth

+0

这么多在评论中的线索! – nruth

+1

@nruth也能够设置使用的nginx buildpack在Heroku反向代理:https://github.com/ryandotsmith/nginx-buildpack。这款YMMV的成功取得了有限的成功。 –