当来自Web代理的请求

时间:2018-06-19 06:32:55

标签: ruby-on-rails-3 webproxy

上下文

我正在开发一个应用程序,该应用程序从request检测用户的IP地址,并限制他们根据所在国家/地区对某个页面执行某些操作。

问题

当用户通过某个Web代理向我们的应用程序发出请求时,我们无法获取用户设备的原始IP地址,因此无法获取该国家/地区的原始IP地址。网络代理的示例可以是hide.me等网站,也可以是GeoProxy等浏览器扩展程序。

我尝试扫描Rails控制器中的整个request对象,看看是否有关于用户真实IP地址的信息,但我的每一次尝试似乎都返回了Web代理的IP地址。请参阅下面的一些结果(开发模式+ ngrok):

> request.ip
 => "154.48.196.3"        # This is IP address of web proxy i used, while my actual IP address is "119.82.x.x"

> request.remote_ip
 => "154.48.196.3"

> request.remote_addr
 => "127.0.0.1"

> request.env
 => {"GATEWAY_INTERFACE"=>"CGI/1.1",
   "PATH_INFO"=>"/shops/alinea",
   "QUERY_STRING"=>"",
   "REMOTE_ADDR"=>"127.0.0.1",
   "REMOTE_HOST"=>"localhost",
   "REQUEST_METHOD"=>"GET",
   "REQUEST_URI"=>"https://86d3f832.ngrok.io/shops/alinea",
   "SERVER_NAME"=>"86d3f832.ngrok.io",
   "SERVER_PORT"=>"443",
   "SERVER_PROTOCOL"=>"HTTP/1.1",
   "SERVER_SOFTWARE"=>"WEBrick/1.3.1 (Ruby/2.1.10/2016-04-01)",
   "HTTP_HOST"=>"86d3f832.ngrok.io",
   "HTTP_USER_AGENT"=>"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.79 Safari/537.36",
   "HTTP_ACCEPT"=>"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8",
   "HTTP_X_FORWARDED_PROTO"=>"https",
   "HTTP_X_FORWARDED_FOR"=>"154.48.196.3",
   ...}

> request.env['HTTP_X_FORWARDED_FOR']
 => "154.48.196.3"

有人可以指导我如何生成一个万无一失的解决方案,无论他们如何尝试访问我们的应用程序,每次都会返回用户的原始IP地址吗?

最佳解决方案应涵盖this doc尽可能多的积分。

配置

  • Ruby v2.1.3
  • Rails v3.2.22.5

0 个答案:

没有答案