请教一个后端获取用户真实 IP 的问题 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
xzYao
V2EX    程序员

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

  •  
  •   xzYao 2019-06-19 12:38:51 +08:00 5227 次点击
    这是一个创建于 2308 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

    另外欢迎围观另外一种情况,14 年的帖子(真实 ip 的 真实 ip 到底特么是什么真实 ip ),https://bbs.csdn.net/topics/390727207,要多简单就会有多简单,要多复杂也会有多复杂
    phpfpm
        9
    phpfpm  
       2019-06-19 16:40:30 +08:00
    就一句话:
    为了安全,如果 remote_addr 是你信任的节点,就用 xff 的 ip
    否则用 remoteaddr
    jay0726
        10
    jay0726  
       2019-06-19 17:07:02 +08:00
    AndroidEngineer
        11
    AndroidEngineer  
       2019-06-19 21:00:45 +08:00
    我用 tor 你能有办法?
    botsonar
        12
    botsonar  
       2019-06-19 21:19:06 +08:00
    @AndroidEngineer tor 也有办法的,现在也可以查出来你用没有用 tor
    vZexc0m
        13
    vZexc0m  
       2019-06-19 21:34:11 +08:00 via Android
    这个应该是无解的,只有 remote_addr 无法伪造,但是用户用了代理,你也无法获取真实 IP。
    hasoidhaio
        14
    hasoidhaio  
       2019-06-19 22:26:43 +08:00
    @botsonar tor 有公开出口节点
    botsonar
        15
    botsonar  
       2019-06-19 23:00:14 +08:00
    @hasoidhaio 嗯 这是一个好办法
    ChristopherWu
        16
    ChristopherWu  
       2019-06-19 23:16:28 +08:00
    请看: t/543304, 我有详尽的解释这些关系。另外可以用 http://nginx.org/en/docs/http/ngx_http_realip_module.html 的。
    AndroidEngineer
        17
    AndroidEngineer  
       2019-06-20 12:47:03 +08:00
    @botsonar VPN + tor 你确定你能追溯到源 IP ?
    AndroidEngineer
        18
    AndroidEngineer  
       2019-06-20 12:48:17 +08:00
    @botsonar 我还可以加虚拟机
    xzYao
        19
    xzYao  
    OP
       2019-06-20 14:07:29 +08:00
    感谢各位大佬的回答,受教了
    botsonar
        20
    botsonar  
       2019-06-20 14:09:22 +08:00
    @AndroidEngineer 没办法追查源 IP 有 tor 的情况基本上都没有办法,只能监测出来有没有用 tor
    AndroidEngineer
        21
    AndroidEngineer  
       2019-06-20 14:38:37 +08:00
    @botsonar 如果真的考虑那么严格的话,可以考虑 tor 的流量混淆,这个我没有做过,但是在相关资料上看过
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3271 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 11:44 PVG 19:44 LAX 04:44 JFK 07:44
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86