后端 PHP,想要获取客户端的真实 IP。网上查阅资料,可以通过 remote_addr 和 x_forwarded_for 这两个头信息来获取。
在中间没有代理的时候,remote_addr 代表客户端的 IP,但是有代理的时候 remote_addr 存的是代理机器 IP。 而当使用代理时,x_forwarded_for 会把代理 IP 拼接在后面,第一个始终是客户端真实 IP。但是 x_forwarded_for 客户端可以伪造。
然后有资料说通过 nginx 配置: proxy_set_header X-Forward-For $remote_addr; 将 remote_addr 覆盖 x_forwarded_for,从而覆盖客户端伪造的信息,将客户端真实 IP 始终放在第一个,已获取客户端真实 IP。
这里我的疑问是:就算我最外层的 nginx 代理(反向代理)通过配置,将 remote_addr 放在了 x_forwarded_for 的第一位,让后端可以通过获取 x_forwarded_for 第一位来获取用户真实 IP,如果最外层 nginx 和用户之间,存在用户的代理呢?此时 remote_addr 存的不就是用户代理的 IP 了么?
![]() | 1 momocraft 2019-06-19 12:54:05 +08:00 是,没办法(其实如果有办法就是安全漏洞了) |
![]() | 2 locoz 2019-06-19 13:06:09 +08:00 没办法的,你不能保证用户自己不使用代理服务器进行转发。 |
![]() | 3 leishi1313 2019-06-19 13:23:50 +08:00 via Android 后端没有办法的,只能给啥就是啥,前端还可以请求位置什么的 |
![]() | 4 Livid MOD PRO |
5 Jirajine 2019-06-19 13:41:12 +08:00 via Android 这个要是让你获得那还了得;前端还可以用点阴招偷到,所以浏览器必须要禁用 WebRTC,hyperlink ping 之类的。要是能让你取得这个那代理还有什么意义 |
![]() | 6 wuqingdzx 2019-06-19 14:48:03 +08:00 用户辛辛苦苦用个代理就是不想让你知道用户的真实 IP 啊 |
7 botsonar 2019-06-19 14:50:45 +08:00 有办法的,可以看看 webrtc |
![]() | 8 xiangyuecn 2019-06-19 16:36:40 +08:00 一棍子打死吧,永远不要使用 x_forwarded_for (包括类似的头)里面 不是自己控制(非反代设置的)的 ip。 另外欢迎围观另外一种情况,14 年的帖子(真实 ip 的 真实 ip 到底特么是什么真实 ip ),https://bbs.csdn.net/topics/390727207,要多简单就会有多简单,要多复杂也会有多复杂 |
9 phpfpm 2019-06-19 16:40:30 +08:00 就一句话: 为了安全,如果 remote_addr 是你信任的节点,就用 xff 的 ip 否则用 remoteaddr |
![]() | 10 jay0726 2019-06-19 17:07:02 +08:00 |
11 AndroidEngineer 2019-06-19 21:00:45 +08:00 我用 tor 你能有办法? |
12 botsonar 2019-06-19 21:19:06 +08:00 @AndroidEngineer tor 也有办法的,现在也可以查出来你用没有用 tor |
![]() | 13 vZexc0m 2019-06-19 21:34:11 +08:00 via Android 这个应该是无解的,只有 remote_addr 无法伪造,但是用户用了代理,你也无法获取真实 IP。 |
14 hasoidhaio 2019-06-19 22:26:43 +08:00 @botsonar tor 有公开出口节点 |
15 botsonar 2019-06-19 23:00:14 +08:00 @hasoidhaio 嗯 这是一个好办法 |
![]() | 16 ChristopherWu 2019-06-19 23:16:28 +08:00 请看: t/543304, 我有详尽的解释这些关系。另外可以用 http://nginx.org/en/docs/http/ngx_http_realip_module.html 的。 |
17 AndroidEngineer 2019-06-20 12:47:03 +08:00 @botsonar VPN + tor 你确定你能追溯到源 IP ? |
18 AndroidEngineer 2019-06-20 12:48:17 +08:00 @botsonar 我还可以加虚拟机 |
![]() | 19 xzYao OP 感谢各位大佬的回答,受教了 |
20 botsonar 2019-06-20 14:09:22 +08:00 @AndroidEngineer 没办法追查源 IP 有 tor 的情况基本上都没有办法,只能监测出来有没有用 tor |
21 AndroidEngineer 2019-06-20 14:38:37 +08:00 @botsonar 如果真的考虑那么严格的话,可以考虑 tor 的流量混淆,这个我没有做过,但是在相关资料上看过 |