V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
如果你希望学习 CDN 相关知识,那么建议你可以遍历以下软件的说明文档。
NGINX
cURL
Jackyxiaoc
V2EX  ›  CDN

使用阿里云的 slb 之后如何防止有人在 X-FORWARDED-FOR 头伪造 IP, slb 会原样传递,导致的假的 ip。有大神知道怎么解决这个问题吗?

  •  
  •   Jackyxiaoc · Apr 22, 2019 · 6268 views
    This topic created in 2564 days ago, the information mentioned may be changed or developed.
    使用阿里云的 slb 之后如何防止有人在 X-FORWARDED-FOR 头伪造 IP,slb 会原样传递,导致的假的 ip。
    伪造 ip 成本是不是特别低 emmm...
    15 replies    2022-08-11 10:32:36 +08:00
    yimuyimu
        1
    yimuyimu  
       Apr 22, 2019 via Android
    其他云也会遇到这个问题阿。https 加双向证书的方案试试
    yidinghe
        2
    yidinghe  
       Apr 22, 2019 via Android
    提工单,问清楚就行了。
    Jackyxiaoc
        3
    Jackyxiaoc  
    OP
       Apr 22, 2019
    @yimuyimu 谢谢

    @yidinghe 工单两天了没解决方案
    leo108
        4
    leo108  
       Apr 22, 2019
    建议深入了解一下 XFF 头,不要随便搜一个所谓『获取真实访客 IP 』的代码就拿来用。

    简单一句话就是只信任来自可信反代的前一个 XFF 头。
    imdong
        5
    imdong  
       Apr 22, 2019
    网上能找到的获取客户端 IP 的代码,基本上都是 同一个。
    反正我开发 PHP 的,找到的代码全都是 N 年前的史前代码。
    并且,全都有 IP 伪造的风险。

    至于阿里,我使用 CDN 的时候,他是有一个 ALI_CDN_READ_REMOTE_IP 这个字段的

    自己看下,具体字段名我不记得,看下有没有。
    这个是无法被伪造的。
    auser
        6
    auser  
       Apr 22, 2019
    方案 1: 使用 TCP 监听,socket 层的地址就是客户端的真实 IP 地址。基于 TCP 三次握手,无法伪造。
    方案 2: 从请求头从拿 RemoteIp 字段。这个类似 5 楼所述,阿里云 CDN 设置的字段。
    opengps
        7
    opengps  
       Apr 22, 2019
    这个问题,好多 cdn 都有
    Livid
        8
    Livid  
    MOD
    PRO
       Apr 22, 2019   ❤️ 1
    1. 每一个 CDN 都会有自己用于实现这个目的的独特头部。
    2. 如果 CDN 支持部署边缘计算逻辑,那么可以自己写一些代码来更安全地实现这个。
    blless
        9
    blless  
       Apr 23, 2019 via Android
    多层代理会有多个 ip,只取最后一个就好,按楼上的说法,只有阿里这个负载均衡反代才是合法的,只要相信阿里这个就好
    moult
        10
    moult  
       Apr 23, 2019 via iPhone
    其实这问题无解。网站不得不无条件信任 XFF 头。因为在安卓的微信浏览器下面,所有的请求都会经过腾讯的服务器中转,中转之后,直接获取到的 IP 是腾讯服务器的 IP,只能信任 XFF 头来获取真实的用户 IP 地址。
    richard1122
        11
    richard1122  
       Apr 23, 2019
    前端时间研究过这个问题,XFF 头是依次增加 ip 的,不会丢弃掉以前的。

    你确认自己后端在一个可信的代理后面(比如自己部署的 nginx 或者云平台的网关)时,可以直接取最后一个。

    比如汤姆猫已经实现了这个逻辑,只需要配置一下,request 里面的 remote 地址就是正确的了。
    est
        12
    est  
       Apr 23, 2019 via Android
    还是我有解的。你自己请求也加一个 xff 然后如果数据对不上就是被搞了
    sadpencil
        13
    sadpencil  
       Jan 26, 2021
    @imdong 实际的字段名叫 HTTP_ALI_CDN_REAL_IP
    sadpencil
        14
    sadpencil  
       Jan 26, 2021
    上一条打错了,@imdong 实际的字段名叫 ALI_CDN_REAL_IP
    chinafengzhao
        15
    chinafengzhao  
       Aug 11, 2022
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   3127 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 53ms · UTC 00:31 · PVG 08:31 · LAX 17:31 · JFK 20:31
    ♥ Do have faith in what you're doing.