【发布时间】:2011-06-21 22:09:11
【问题描述】:
为了避免滥用,我想在我们的 Rails 应用程序中为 REST API 添加速率限制。在对此进行了一些研究之后,看起来最好的做法是move this responsibility into the web server,而不是在应用程序本身中检查这个。不幸的是,这在我的情况下无法完成,因为我将应用程序托管在 Heroku 上,因此无法控制 Web 服务器的设置。
在这种情况下应该怎么做才能停止滥用 API?
【问题讨论】:
-
嗯,你可以一起破解一个解决方案(虽然它会很丑),这取决于你的反应有多大。例如,如果您的响应很小(您想要限制的响应小于 1 MB),您可以设置一个计时器,根据您正在执行的操作,限制/延迟来自给定会话的重复请求。相反,如果您的回复很大,这只会隔开回复(而不是减慢传输速度)。
-
@normalocity 嗯,我很喜欢这个主意!我认为在易受攻击的控制器上使用简单的 before_filter 不会那么难看。添加更复杂的规则可能会变得更复杂(例如,每个用户每分钟 10 个请求)。
-
嗯-也许我会提交它作为答案。 :) 也许在用户帐户中添加一个字段,记录他们上次提出请求时的记录。棘手的是,如果您使用的是 Mongrel(或其他单线程 Web 服务器),如果您只是延迟请求,您将减慢其他所有人的速度。我想这就是我说的丑陋的意思。如果您使用的是不同的网络服务器,那么这种方法可能会奏效。
-
您向 Heroku 员工寻求帮助了吗?帮助您解决此问题符合他们的利益,因为滥用会对他们的平台产生负面影响。我发现它们很有帮助。
-
滥用单个应用程序,如问题中所述,单个应用程序可能被归类为滥用,不会对 Heroku 平台产生负面影响,因为 Heroku 平台(似乎)具有无限可扩展性和Heroku 实行公用事业定价。
标签: ruby-on-rails rest heroku rate-limiting