请教一个后端获取用户真实 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 了么?

4743 次点击
所在节点    程序员
21 条回复
AndroidEngineer
2019-06-20 14:38:37 +08:00
@botsonar 如果真的考虑那么严格的话,可以考虑 tor 的流量混淆,这个我没有做过,但是在相关资料上看过

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

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

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

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

© 2021 V2EX