Rails的ActionPack remote_ip对请求的可靠性如何?

时间:2012-03-06 13:26:37

标签: ruby-on-rails ruby ruby-on-rails-3 network-programming geolocation

我一直对返回公共IP地址的方法持怀疑态度。除非您使用诸如whatismyip.com之类的外部服务,否则它们通常会出现故障。

Rails remote_ip方法在100%的时间内确定外部公共IP的可靠性如何? https://github.com/rails/rails/blob/master/actionpack/lib/action_dispatch/middleware/remote_ip.rb

我刚刚发现我遇到的问题是CloudFlare,它有CF-Connecting-IP的不同标题。看来我必须通过(headers["CF-Connecting-IP"] || remote_ip)的某些方式来解决这个问题,以便克服这种特殊情况。

所以看来要么我需要修补补丁remote_ip,要么考虑到这一点而不会在任何地方干掉我的代码。

2 个答案:

答案 0 :(得分:2)

我是remote_ip当前实现的作者,我不得不重做它以正确处理X-Forwarded-For(特别是如果请求包含多个X-Forwarded-For标头)。听起来您可能想要提交一个pull请求,使该方法也检查CF-Connecting-IP标头。最后,您可能需要更改在生产中使用的应用服务器,因为其中一些可以ignore repeated request headers

答案 1 :(得分:0)

remote_ip来自HTTP请求标头,因此任何知道如何更改它的人都可以更改remote_ip地址。也可以以这种方式使用代理和更改地址。您可以将它用于地理位置或类似的东西,但我认为它不适合黑名单或白名单。