请教一个后端获取用户真实 IP 的问题

2019-06-19 12:38:51 +08:00
 xzYao

后端 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 了么?

4526 次点击
所在节点    程序员
21 条回复
momocraft
2019-06-19 12:54:05 +08:00
是,没办法(其实如果有办法就是安全漏洞了)
locoz
2019-06-19 13:06:09 +08:00
没办法的,你不能保证用户自己不使用代理服务器进行转发。
leishi1313
2019-06-19 13:23:50 +08:00
后端没有办法的,只能给啥就是啥,前端还可以请求位置什么的
Livid
2019-06-19 13:24:52 +08:00
Jirajine
2019-06-19 13:41:12 +08:00
这个要是让你获得那还了得;前端还可以用点阴招偷到,所以浏览器必须要禁用 WebRTC,hyperlink ping 之类的。要是能让你取得这个那代理还有什么意义
wuqingdzx
2019-06-19 14:48:03 +08:00
用户辛辛苦苦用个代理就是不想让你知道用户的真实 IP 啊
botsonar
2019-06-19 14:50:45 +08:00
有办法的,可以看看 webrtc
xiangyuecn
2019-06-19 16:36:40 +08:00
一棍子打死吧,永远不要使用 x_forwarded_for (包括类似的头)里面 不是自己控制(非反代设置的)的 ip。

另外欢迎围观另外一种情况,14 年的帖子(真实 ip 的 真实 ip 到底特么是什么真实 ip ),https://bbs.csdn.net/topics/390727207,要多简单就会有多简单,要多复杂也会有多复杂 😂
phpfpm
2019-06-19 16:40:30 +08:00
就一句话:
为了安全,如果 remote_addr 是你信任的节点,就用 xff 的 ip
否则用 remoteaddr
jay0726
2019-06-19 17:07:02 +08:00
AndroidEngineer
2019-06-19 21:00:45 +08:00
我用 tor 你能有办法?
botsonar
2019-06-19 21:19:06 +08:00
@AndroidEngineer tor 也有办法的,现在也可以查出来你用没有用 tor
vZexc0m
2019-06-19 21:34:11 +08:00
这个应该是无解的,只有 remote_addr 无法伪造,但是用户用了代理,你也无法获取真实 IP。
hasoidhaio
2019-06-19 22:26:43 +08:00
@botsonar tor 有公开出口节点
botsonar
2019-06-19 23:00:14 +08:00
@hasoidhaio 嗯 这是一个好办法
ChristopherWu
2019-06-19 23:16:28 +08:00
请看: https://www.v2ex.com/t/543304, 我有详尽的解释这些关系。另外可以用 http://nginx.org/en/docs/http/ngx_http_realip_module.html 的。
AndroidEngineer
2019-06-20 12:47:03 +08:00
@botsonar VPN + tor 你确定你能追溯到源 IP ?
AndroidEngineer
2019-06-20 12:48:17 +08:00
@botsonar 我还可以加虚拟机
xzYao
2019-06-20 14:07:29 +08:00
感谢各位大佬的回答,受教了
botsonar
2019-06-20 14:09:22 +08:00
@AndroidEngineer 没办法追查源 IP 有 tor 的情况基本上都没有办法,只能监测出来有没有用 tor

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

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

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

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

© 2021 V2EX