我正在寻找阻止特定代理的方法,例如:
http://demosites.conversionsupport.com/reverseproxydemo?domainpath=http://stackoverflow.com
我不希望它在Heroku上访问/显示我的rails 2.3.15 app。我玩过gems rack-rewrite和rack-block,但没有运气,因为我需要通过域名阻止,而不是IP地址(这个东西托管在ghs.google.com上,我是而不是阻止)
在一个完美的世界中,我可以重定向到我的规范网址,但我也会满足于503或404.
(有问题的反向代理用于展示代理所有者的聊天小部件应用程序,但在任何网站上,而不是限制使用代理所有者的潜在客户拥有的网站。它还会导致一些讨厌的抓取机器人错误登录谷歌的网络主工具。这本身并不是什么大不了的事,但当与那个破坏网站功能的东西相结合,以及我的网站有一个Creative Commons许可证要求网站没有为了商业目的而重复使用,它让我想停下来。)
答案 0 :(得分:0)
Rack::Attack!!!似乎非常彻底。我有support for blacklisting,这听起来像你需要的。它没有提到Rails 2.3支持,但您可以使用config.ru
直接配置它,无论如何。
README中给出的示例显示了这个
Rack::Attack.blacklist('block bad UA logins') do |req|
req.path == '/login' && req.post? && req.user_agent == 'BadUA'
end
看起来Rack request(req
)对象被传递给块,因此您应该能够使用该对象上的任何可用方法。
答案 1 :(得分:0)
由于我们上面提到的所有宝石都不能用于rails 2.3.15(我已经更新到2.3.18),而且我没有时间从rails 2到rails进行艰苦的升级3,我最终得到了下面的解决方案。 (注意:此解决方案仅适用于从/ app提供的页面。它不适用于从/ public提供的页面。我仍在寻找保护/ public公共服务页面的解决方案。)
我把下面的代码丢弃到/app/controllers/application_controller.rb
1.2.3.*
是我实际阻止的IP地址块的占位符。将1.2.3
替换为要阻止的0/24范围的前三个八位字节,或将1.2.3.*
替换为单个IP地址以阻止单个IP。您还需要将http://YourCanonicalDomain.tld/503.html
替换为您要发送给用户的503页的地址或其他页面,以便他们可以按照要显示的网址查看您的网页,而不是将其留在在反向代理的URL:
before_filter: block_ip
然后在文件中:
def block_ip
if request.remote_ip.match('1.2.3.*')
redirect_to "http://YourCanonicalDomain.tld/503.html"
return
end
end
我的503.html,位于/ public,向用户显示一条说明,他们试图以不允许的方式查看内容,并且很快就会将其重定向到该网站的主页。 503.html包含以下内容:
<meta http-equiv="REFRESH" content="15;url=http://YourCanonicalDomain.tld">
将http://YourCanonicalDomain.tld
替换为您要将用户重定向到的页面。提高或降低数字15
以提高或降低用户重定向之前页面显示的时间。