Rails的ActionController:request.remote_ip和request.remote_addr有什么区别?

15
在ActionController的源代码中,本地请求被定义如下:
def local_request? #:doc:
    request.remote_addr == LOCALHOST && request.remote_ip == LOCALHOST
end

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

2个回答

17

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

我在我的博客中记录了测试最受欢迎的Ruby应用程序服务器的结果,如果您的应用程序需要考虑重复的头部,则可能需要查看这些结果。


11
似乎remote_addr直接返回REMOTE_ADDR环境变量的值,而remote_ip将根据HTTP_X_FORWARDED_FORHTTP_CLIENT_IP变量进行调整,这些变量在客户端通过代理服务器进行转发时可能存在。

local_request?的双重检查只是一种确定用户是否来自本地机器的方式,而不仅仅是通过本地代理从其他地方转发过来的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接