2013-05-03 32 views
5

我在Heroku上有一个Rails应用程序,每秒约有10个请求,这很奇怪,因为现在没人在使用该应用程序。例如,所有这些请求都是针对显然尝试利用安全漏洞的URI。阻止IP在Heroku上的Rails应用程序

http://myapp.com/etc/passwd 

和类似的东西。

如何阻止此人访问我的应用程序?有没有快速解决这个问题?

回答

7

也许rack-attack会做你想要的吗?

# Block requests from 1.2.3.4 
Rack::Attack.blacklist('block 1.2.3.4') do |req| 
    # Request are blocked if the return value is truthy 
    '1.2.3.4' == req.ip 
end 
+1

有没有一种方法可以将它设置为从数据库表中动态工作?我怎么能用这个做一个用户黑名单? – OneChillDude 2013-05-06 17:35:59

+0

很可能,但你需要自己设计一下。你可能想看看其他的Rails选项,如果你能找到任何。 – catsby 2013-05-15 20:22:02

+1

文档声明中提供了对Redis的内置支持。 – RandallB 2013-10-24 15:20:16

2

我的回应有点晚,但由于您后来询问了有关动态添加IP的问题,不妨分享一下。

从此Github Issue。也许你可以使用缓存存储中IP的存在/存在来确定它是否应该被阻止(vs手动添加IP并重新部署应用程序)。

Rack::Attack.blacklist('block <ip>') do |req| 
    # if variable `block <ip>` exists in cache store, then we'll block the request 
    Rails.cache.fetch("block #{req.ip}").present? 
end 

从应用程序或从控制台,你可以写你的缓存存储。

Rails.cache.write('block 1.2.3.4', true, expires_in: 5.days)