上下文:有人写了一个机器人,使1000的api调用我的web应用程序,这反过来依赖于谷歌api。我只希望真正的用户使用web应用程序。
如何防止机器人访问api。一种解决方案是记录IP地址并限制通话速率。另一种方法是使用验证码。
然而,我正在寻找一个简单的hack(聪明的,天真的实现),防止自动查询。
web应用程序是用Ruby on Rails构建的。
编辑:我的webapp执行一些计算并返回结果。游客是一般公众,他们只是偶尔使用它。他们通过谷歌搜索结果找到了我的应用。因此,他们不需要使用访问令牌来使用网站。
您可以使用像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
您检查机架节流阀gem了吗
add-api-throttle-to-your-rails