阻止不受欢迎的代理访问Heroku上的Rails 2.3.15应用程序

时间:2014-02-24 05:25:36

标签: ruby-on-rails heroku proxy block

我正在寻找阻止特定代理的方法,例如:

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许可证要求网站没有为了商业目的而重复使用,它让我想停下来。)

2 个答案:

答案 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 requestreq)对象被传递给块,因此您应该能够使用该对象上的任何可用方法。

答案 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以提高或降低用户重定向之前页面显示的时间。