V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
如果你希望学习 CDN 相关知识,那么建议你可以遍历以下软件的说明文档。
NGINX
cURL
Jackyxiaoc
V2EX  ›  CDN

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

  •  
  •   Jackyxiaoc · 2019-04-22 22:54:52 +08:00 · 4728 次点击
    这是一个创建于 1381 天前的主题,其中的信息可能已经有所发展或是发生改变。
    使用阿里云的 slb 之后如何防止有人在 X-FORWARDED-FOR 头伪造 IP,slb 会原样传递,导致的假的 ip。
    伪造 ip 成本是不是特别低 emmm...
    15 条回复    2022-08-11 10:32:36 +08:00
    yimuyimu
        1
    yimuyimu  
       2019-04-22 23:12:50 +08:00 via Android
    其他云也会遇到这个问题阿。https 加双向证书的方案试试
    yidinghe
        2
    yidinghe  
       2019-04-22 23:16:37 +08:00 via Android
    提工单,问清楚就行了。
    Jackyxiaoc
        3
    Jackyxiaoc  
    OP
       2019-04-22 23:32:42 +08:00
    @yimuyimu 谢谢

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

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

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

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

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

    比如汤姆猫已经实现了这个逻辑,只需要配置一下,request 里面的 remote 地址就是正确的了。
    est
        12
    est  
       2019-04-23 07:53:22 +08:00 via Android
    还是我有解的。你自己请求也加一个 xff 然后如果数据对不上就是被搞了
    sadpencil
        13
    sadpencil  
       2021-01-26 06:46:38 +08:00
    @imdong 实际的字段名叫 HTTP_ALI_CDN_REAL_IP
    sadpencil
        14
    sadpencil  
       2021-01-26 06:47:25 +08:00
    上一条打错了,@imdong 实际的字段名叫 ALI_CDN_REAL_IP
    chinafengzhao
        15
    chinafengzhao  
       174 天前
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   实用小工具   ·   1157 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 42ms · UTC 16:21 · PVG 00:21 · LAX 08:21 · JFK 11:21
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.