如何防止api使用?

时间:2014-05-09 00:05:01

标签: ruby-on-rails ruby performance api google-api

上下文:有人编写了一个机器人,在我的webapp上进行了1000次api调用,而后者依赖于google api。我只希望真正的用户使用webapp。

如何阻止僵尸程序访问api。一种解决方案是记录IP地址和速率限制呼叫。另一种是使用Captcha。

但是,我正在寻找一种简单的黑客(聪明,天真的实现)来阻止自动查询。

Web应用程序是使用Ruby on Rails构建的。

编辑: 我的webapp执行一些计算并返回结果。访客是一般公众,他们只是零星地使用它。他们通过谷歌搜索结果找到我的应用程序。因此,他们不需要使用访问令牌来使用该网站。

2 个答案:

答案 0 :(得分:1)

您可以使用像Rack Attack这样的gem来限制各种条件下的用户请求。例如,允许来自每秒相同ip的最大5请求:

# Throttle requests to 5 requests per second per ip
Rack::Attack.throttle('req/ip', :limit => 5, :period => 1.second) do |req|
  # If the return value is truthy, the cache key for the return value
  # is incremented and compared with the limit. In this case:
  #   "rack::attack:#{Time.now.to_i/1.second}:req/ip:#{req.ip}"
  #
  # If falsy, the cache key is neither incremented nor checked.

  req.ip
end

答案 1 :(得分:0)