ser*_*erg 8 ruby-on-rails spoofing
我在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
当中间代理在HTTP_CLIENT_IP和HTTP_X_FORWARDED_FOR中插入用户IP地址,并且此地址是私有的时,ActionDispatch :: RemoteIp会引发IpSpoofAttackError异常.
当企业代理在标头中包含用户的IP地址时,这通常是私有的.只有当地址与HTTP_CLIENT_IP中找到的地址不完全匹配时,才应该从HTTP_X_FORWARDED_FOR中包含的链中删除私有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.什么是新的调用,如何在网站范围内设置它?
不是关闭警告,而是解决实际问题可能更好.这是我对Rails告诉你的内容的改述:
这个请求似乎来自两个不同的反向代理.其中一个将
CLIENT_IP标头设置为用户的IP地址; 另一个设置X_FORWARDED_FOR标题.其中一个值可能是正确的,另一个可能包含反向代理的IP,我无法分辨哪个是哪个.我无法可靠地确定该用户的IP地址,因此我将拒绝该请求.
"正确"的解决方案是停止设置两个标题.为此,你需要追踪他们来自哪里(我从你的Bluecoat设备开始)并找出他们是否都需要.通常你只会使用其中一个.
如果事实证明它们都是需要的(我已经看到了陌生的东西),那么你需要找出首先设置哪个头(假设链中有两个代理).然后,您可以编写一个删除其他HTTP标头的自定义中间件.
有关如何创建自己的中间件的指示,请参阅Rails 3中间件修改请求标头.在RemoteIp中间件之前插入它,清除哪个标题有"坏"值,你应该是好的.
config.action_dispatch.ip_spoofing_check 应该基于RemoteIp的调用链工作。
通过设置匹配所有 IPv4 地址的正则表达式config.action_dispatch.trusted_proxies,您应该能够达到相同的效果。
| 归档时间: |
|
| 查看次数: |
3820 次 |
| 最近记录: |