【问题标题】:How to disable IP Spoofing check in Rails 4 application?如何在 Rails 4 应用程序中禁用 IP 欺骗检查?
【发布时间】:2015-03-12 03:06:43
【问题描述】:

我的 Rails 4 应用程序出现以下错误:

ActionDispatch::RemoteIp::IpSpoofAttackError: IP 欺骗攻击?! HTTP_CLIENT_IP="xx.xx.xx.xx" HTTP_X_FORWARDED_FOR="xx.xx.xx.xx"

我们不需要这种类型的安全检查,所以在谷歌搜索后我发现了这个:

https://github.com/rails/rails/issues/10780

当中间代理插入用户 IP 地址时 HTTP_CLIENT_IP 和 HTTP_X_FORWARDED_FOR,这个地址是 私有的,ActionDispatch::RemoteIp 引发 IpSpoofAttackError 例外。

当企业代理在标头中包含用户的 IP 地址时, 这通常是私有的。删除私有 IP 地址 HTTP_X_FORWARDED_FOR 中包含的链可能应该只完成 当地址与在中找到的地址不完全匹配时 HTTP_CLIENT_IP。如果匹配,那应该是用户的IP 地址。

例如在以下环境中会发生这种情况:

HTTP_CLIENT_IP:172.17.19.51 HTTP_X_BLUECOAT_VIA:ffffffffffffffff HTTP_X_FORWARDED_FOR:172.17.19.51 REMOTE_ADDR:xxx.xxx.xxx.xxx(这个 将是一个公共 IP 地址)


此处提供的修复:

作为一种解决方法,我在 config/application.rb 中禁用了此检查:

config.action_dispatch.ip_spoofing_check = false

但这似乎在 Rails 4 中不起作用。新调用是什么?如何在站点范围内设置它?

【问题讨论】:

    标签: ruby-on-rails spoofing


    【解决方案1】:

    与其关闭警告,不如解决实际问题。这是我对 Rails 告诉你的内容的重新表述:

    此请求似乎来自两个不同的反向代理。其中之一将CLIENT_IP 标头设置为用户的IP 地址;另一个设置X_FORWARDED_FOR 标头。其中一个值可能是正确的,另一个可能包含反向代理的 IP,我无法判断哪个是哪个。我无法可靠地确定此用户的 IP 地址,因此我将拒绝该请求。

    “正确”的解决方案是停止设置两个标题。为此,您需要追踪它们的来源(我将从您的 Bluecoat 设备开始)并确定它们是否都需要。通常你只会使用其中一个。

    如果事实证明它们都是必需的(我见过奇怪的东西),那么您需要找出首先设置的标头(假设链中有两个代理)。然后你可以编写一个自定义中间件来删除另一个 HTTP 标头。

    请参阅Rails 3 middleware modify request headers 以获取有关如何创建自己的中间件的指导。插入到RemoteIp中间件之前,清除掉哪个header中的“bad”值,应该就好了。

    【讨论】:

      【解决方案2】:

      config.action_dispatch.ip_spoofing_check 应该基于calling chainRemoteIp 工作。

      您应该可以通过将config.action_dispatch.trusted_proxies 设置为regex matching all IPv4 addresses 来实现相同的效果。

      【讨论】:

        【解决方案3】:

        config.action_dispatch.ip_spoofing_check = false 仍然是正确的设置。

        但是,web-console(自 Rails 4.2 起默认包含在 Rails development 环境中)不遵守此设置,并且只要它包含在应用程序堆栈中就会引发 IpSpoofAttackError,即使 spoofing_checkfalse .此问题的解决方法是从您环境的应用程序堆栈中删除 web-console

        请参阅rails/rails#32379rails/web-console#254,了解有关此问题的更多详细信息和建议的修复方法。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-02-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-01-18
          • 1970-01-01
          相关资源
          最近更新 更多