后端 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 |
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
请看: https://www.v2ex.com/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 的流量混淆,这个我没有做过,但是在相关资料上看过
|