【问题标题】:Rails ActionController: Difference between request.remote_ip and request.remote_addrRails ActionController:request.remote_ip 和 request.remote_addr 之间的区别
【发布时间】:2011-05-04 02:01:29
【问题描述】:

在ActionController源码中,本地请求定义如下:

def local_request? #:doc:
    request.remote_addr == LOCALHOST && request.remote_ip == LOCALHOST
end

在我的应用程序中,如果请求来自特定 IP 范围,我想使用不同的逻辑。 request.remote_addrrequest.remote_ip有什么区别,应该用哪一个?

【问题讨论】:

    标签: ruby-on-rails client request ip-address actioncontroller


    【解决方案1】:

    我是remote_ip 当前实现的作者,它确实包括检查 IP 欺骗攻击和正确处理多个 X-Forwarded-For 标头。但是有一个很大的警告:只有一些 Ruby Web 服务器支持多个标头,因此该值仍然可能是错误的。

    我写了测试最流行的 Ruby 应用服务器 on my blog 的结果,您可能想看看重复的标头是否对您的应用程序很重要。

    【讨论】:

      【解决方案2】:

      似乎remote_addr 按原样返回REMOTE_ADDR 环境变量的值,而remote_ip 也会根据HTTP_X_FORWARDED_FORHTTP_CLIENT_IP 变量的存在来调整它,例如,当您的客户端通过代理转发时,您可能会遇到这种情况。

      local_request? 的双重检查只是一种确定用户来自本地计算机的方法,而不是简单地通过本地代理从其他地方转发。

      【讨论】:

        猜你喜欢
        • 2020-07-27
        • 2016-01-07
        • 1970-01-01
        • 2010-11-03
        • 2017-11-12
        • 2015-07-22
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多