我想我想限制最大文件大小和形式有效负载,它可以到达使用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/
为什么要关心:
奖励积分:下一步似乎是在防火墙中临时禁止重复违规者,这样他们就无法点击网络服务器。在Heroku上哪些技术有用?
编辑:相关的其他线程 Protect yourself against Dos attacks
答案 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永远无法获得的,所以你必须自己推出自己的服务器;如果我们谈论网络级别的安全性和攻击缓解,我的建议是雇用一个知道如何处理它的系统管理员!
顺便说一句,我很高兴您从一开始就考虑安全性,但设计滥用文件上传的人感觉就像是过早优化(显然是针对您正在构建的应用程序类型的不同程度)。