使用阿里云的 slb 之后如何防止有人在 X-FORWARDED-FOR 头伪造 IP, slb 会原样传递,导致的假的 ip。有大神知道怎么解决这个问题吗?

2019-04-22 22:54:52 +08:00
 Jackyxiaoc
使用阿里云的 slb 之后如何防止有人在 X-FORWARDED-FOR 头伪造 IP,slb 会原样传递,导致的假的 ip。
伪造 ip 成本是不是特别低 emmm...
5435 次点击
所在节点    CDN
15 条回复
yimuyimu
2019-04-22 23:12:50 +08:00
其他云也会遇到这个问题阿。https 加双向证书的方案试试
yidinghe
2019-04-22 23:16:37 +08:00
提工单,问清楚就行了。
Jackyxiaoc
2019-04-22 23:32:42 +08:00
@yimuyimu 谢谢

@yidinghe 工单两天了没解决方案
leo108
2019-04-22 23:35:22 +08:00
建议深入了解一下 XFF 头,不要随便搜一个所谓『获取真实访客 IP 』的代码就拿来用。

简单一句话就是只信任来自可信反代的前一个 XFF 头。
imdong
2019-04-22 23:40:00 +08:00
网上能找到的获取客户端 IP 的代码,基本上都是 同一个。
反正我开发 PHP 的,找到的代码全都是 N 年前的史前代码。
并且,全都有 IP 伪造的风险。

至于阿里,我使用 CDN 的时候,他是有一个 ALI_CDN_READ_REMOTE_IP 这个字段的

自己看下,具体字段名我不记得,看下有没有。
这个是无法被伪造的。
auser
2019-04-22 23:47:24 +08:00
方案 1: 使用 TCP 监听,socket 层的地址就是客户端的真实 IP 地址。基于 TCP 三次握手,无法伪造。
方案 2: 从请求头从拿 RemoteIp 字段。这个类似 5 楼所述,阿里云 CDN 设置的字段。
opengps
2019-04-22 23:47:41 +08:00
这个问题,好多 cdn 都有
Livid
2019-04-22 23:50:15 +08:00
1. 每一个 CDN 都会有自己用于实现这个目的的独特头部。
2. 如果 CDN 支持部署边缘计算逻辑,那么可以自己写一些代码来更安全地实现这个。
blless
2019-04-23 00:18:56 +08:00
多层代理会有多个 ip,只取最后一个就好,按楼上的说法,只有阿里这个负载均衡反代才是合法的,只要相信阿里这个就好
moult
2019-04-23 01:18:50 +08:00
其实这问题无解。网站不得不无条件信任 XFF 头。因为在安卓的微信浏览器下面,所有的请求都会经过腾讯的服务器中转,中转之后,直接获取到的 IP 是腾讯服务器的 IP,只能信任 XFF 头来获取真实的用户 IP 地址。
richard1122
2019-04-23 07:03:04 +08:00
前端时间研究过这个问题,XFF 头是依次增加 ip 的,不会丢弃掉以前的。

你确认自己后端在一个可信的代理后面(比如自己部署的 nginx 或者云平台的网关)时,可以直接取最后一个。

比如汤姆猫已经实现了这个逻辑,只需要配置一下,request 里面的 remote 地址就是正确的了。
est
2019-04-23 07:53:22 +08:00
还是我有解的。你自己请求也加一个 xff 然后如果数据对不上就是被搞了
sadpencil
2021-01-26 06:46:38 +08:00
@imdong 实际的字段名叫 HTTP_ALI_CDN_REAL_IP
sadpencil
2021-01-26 06:47:25 +08:00
上一条打错了,@imdong 实际的字段名叫 ALI_CDN_REAL_IP
chinafengzhao
2022-08-11 10:32:36 +08:00

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/557705

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX