后端 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 年 6 月 19 日
是,没办法(其实如果有办法就是安全漏洞了)
|
2
locoz 2019 年 6 月 19 日
没办法的,你不能保证用户自己不使用代理服务器进行转发。
|
3
leishi1313 2019 年 6 月 19 日 via Android
后端没有办法的,只能给啥就是啥,前端还可以请求位置什么的
|
4
Livid MOD PRO |
5
Jirajine 2019 年 6 月 19 日 via Android
这个要是让你获得那还了得;前端还可以用点阴招偷到,所以浏览器必须要禁用 WebRTC,hyperlink ping 之类的。要是能让你取得这个那代理还有什么意义
|
6
wuqingdzx 2019 年 6 月 19 日
用户辛辛苦苦用个代理就是不想让你知道用户的真实 IP 啊
|
7
botsonar 2019 年 6 月 19 日
有办法的,可以看看 webrtc
|
8
xiangyuecn 2019 年 6 月 19 日
一棍子打死吧,永远不要使用 x_forwarded_for (包括类似的头)里面 不是自己控制(非反代设置的)的 ip。
另外欢迎围观另外一种情况,14 年的帖子(真实 ip 的 真实 ip 到底特么是什么真实 ip ),https://bbs.csdn.net/topics/390727207,要多简单就会有多简单,要多复杂也会有多复杂 😂 |
9
phpfpm 2019 年 6 月 19 日
就一句话:
为了安全,如果 remote_addr 是你信任的节点,就用 xff 的 ip 否则用 remoteaddr |
10
jay0726 2019 年 6 月 19 日
|
11
AndroidEngineer 2019 年 6 月 19 日
我用 tor 你能有办法?
|
12
botsonar 2019 年 6 月 19 日
@AndroidEngineer tor 也有办法的,现在也可以查出来你用没有用 tor
|
13
vZexc0m 2019 年 6 月 19 日 via Android
这个应该是无解的,只有 remote_addr 无法伪造,但是用户用了代理,你也无法获取真实 IP。
|
14
hasoidhaio 2019 年 6 月 19 日
@botsonar tor 有公开出口节点
|
15
botsonar 2019 年 6 月 19 日
@hasoidhaio 嗯 这是一个好办法
|
16
ChristopherWu 2019 年 6 月 19 日
请看: https://www.v2ex.com/t/543304, 我有详尽的解释这些关系。另外可以用 http://nginx.org/en/docs/http/ngx_http_realip_module.html 的。
|
17
AndroidEngineer 2019 年 6 月 20 日
@botsonar VPN + tor 你确定你能追溯到源 IP ?
|
18
AndroidEngineer 2019 年 6 月 20 日
@botsonar 我还可以加虚拟机
|
19
xzYao OP 感谢各位大佬的回答,受教了
|
20
botsonar 2019 年 6 月 20 日
@AndroidEngineer 没办法追查源 IP 有 tor 的情况基本上都没有办法,只能监测出来有没有用 tor
|
21
AndroidEngineer 2019 年 6 月 20 日
@botsonar 如果真的考虑那么严格的话,可以考虑 tor 的流量混淆,这个我没有做过,但是在相关资料上看过
|