都 8012 年了,腾讯云 cdn 居然还不能获取访问 cdn 节点的用户 ip - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
工单节点使用指南
请用平和的语言准确描述你所遇到的问题
厂商的技术支持和你一样也是有喜怒哀乐的普通人类,尊重是相互的
如果是关于 V2EX 本身的问题反馈,请使用 反馈 节点
changwei
V2EX    全球工单系统

都 8012 年了,腾讯云 cdn 居然还不能获取访问 cdn 节点的用户 ip

  •  
  •   hangwei 2018-06-12 14:57:19 +08:00 4846 次点击
    这是一个创建于 2766 天前的主题,其中的信息可能已经有所发展或是发生改变。

    别家的云可以通过其他方式来获取连接到 cdn 节点的真实 IP (例如将真实 IP 写入特定的 HTTP 头部),腾讯云 cdn 还只能用 x-forward-for 这种会被伪造的有安全风险的方式来获取

    我有些 PHP 网站需要通过这个来判断要不要弹验证码(策略是:同一个 IP 输错多少次验证码或者密码就弹验证码,要是用户伪造了 x-forward-for,我的验证码就失效了)

    加这个功能没有多少技术难度吧。

    第 1 条附言    2018-06-12 18:57:25 +08:00
    不好意思,**是我的实验错误导致错怪了腾讯云**,腾讯云的设计是合理的,cdn 会根据实际情况覆盖写入 x-forwarded-for 这个头部,无论用户如何伪造都是无效的,cdn 会根据实际的转发情况将这个头部重写,只有 php 裸奔在 web server 的时候才会被欺骗。

    至于我自己的错误,是因为我伪造的时候 x-forwarded-for 写成了 x-forward-for,导致没有成功,然后无脑喷了一波,删不了帖子,只能下沉一天了。算是一个很乌龙的英文错误把,我现在立刻面壁思过。

    腾讯云的客服很耐心的打电话过来帮我解决了问题,灰常感谢!!!
    11 条回复    2019-06-25 20:16:08 +08:00
    surfire91
        1
    surfire91  
       2018-06-12 15:07:43 +08:00
    瞎猜:
    其实 x-forward-for 也可以?如果腾讯云 CDN 内部不转发,直接拿最后一段,也就是直连腾讯云 CDN 的 ip。
    Felldeadbird
        2
    Felldeadbird  
       2018-06-12 15:17:51 +08:00
    x-forward-for 是腾讯拿回来给你的客户真实 IP。 如果按照常理来看,确实是会被伪造。但是,我觉得腾讯的技术人员应该不会犯这种低级玩意吧? 他们应该是将他们获取到的客户真实 IP,header 到 x-forward-for 而已。
    mydns
        3
    mydns  
       2018-06-12 15:20:09 +08:00
    前年提交的 CDN 工单 直接告知页面 10 秒超时改不了
    zpf124
        4
    zpf124  
       2018-06-12 15:23:06 +08:00
    连接到 cdn 节点的真实 ip 按道理作为一个代理服务器 cdn 会给你添加到 x-forward-for 这个头里啊。

    所以最终结果就两种,
    (之前多段 ip), 连接到 cdn 的 ip
    或者
    (之前多段 ip), 连接到 cdn 的 ip, cdn 的 ip

    你抓一个请求头看看包不包含 cdn 自己的 ip 就完了
    widdy
        5
    widdy  
       2018-06-12 15:33:11 +08:00
    楼主先伪造一个 x-forward-for,看看 CDN 转发给你的对不对,在来喷啊。
    phithon
        6
    phithon  
       2018-06-12 15:34:05 +08:00
    别家云可以通过其他方式来获取连接到 cdn 节点的真实 IP (例如将真实 IP 写入特定的 HTTP 头部),腾讯云 cdn 还只能用 x-forward-for 这种会被伪造的有安全风险的方式来获取

    可以考虑再理解一下 x-forward-for 是什么。
    Reficul
        7
    Reficul  
       2018-06-12 16:02:37 +08:00 via Android
    x-forward-for 不是头?这个头的确可以伪造,所以你要加 ip 白名单,不能信任非来自 CDN 的找个头。
    tencentcloud
        8
    tencentcloud  
       2018-06-12 16:11:08 +08:00
    @changwei 您好,非常抱歉之前的工单答复给您造成误解。腾讯云 CDN 可以通过 x-forward-for 字段和访问日志两种方式来获取用户 IP。x-forward-for 字段是后端通过配置,获取真实客户端 IP 然后写入的,我们也可以支持后端特殊配置为其他字段来获取用户 IP。

    如您需要添加此项配置,欢迎您在工单里面反馈,我们会及时为您处理。感谢您的理解与支持。
    feverzsj
        9
    feverzsj  
       2018-06-12 16:27:19 +08:00
    http 就别用 ip 判断,本身就不靠谱
    Hardrain
        10
    Hardrain  
       2018-06-12 16:28:12 +08:00   2
    1. XFF header 的规则是这样,每经过一个代理 /CDN,这个代理 /CDN 就把上一个代理 /CDN/用户的 IP 附加到 XFF 后面,逗号分隔。这符合 HTTP 对于一个 Header 多个参数的规范。
    例: 后端----前端(反代)------CDN/缓存------负载均衡器------用户

    后端收到的 XFF 内容如下:用户 IP, 负载均衡器 IP, CDN/缓存 IP

    参考: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Forwarded-For

    2. 关于获取 XFF 中用户的 IP:
    Apache 和 Nginx 都有相关模块,请参考文档。
    https://httpd.apache.org/docs/2.4/mod/mod_remoteip.html
    http://nginx.org/en/docs/http/ngx_http_realip_module.html

    3. PHP 获取 XFF header 的内容:
    关于 PHP 获取 Header: https://secure.php.net/manual/zh/function.getallheaders.php
    不过这个只适用于 Apache+mod_php,底下评论里有 Apache+PHP-FPM/Nginx 这类只能用 FPM 的 HTTP Server 所适用的解决方案

    如果 XFF 有多个 IP,用 explode()逗号做 delimiter 转成数组再处理

    4. 关于伪造 XFF,楼主想必看了些关于"伪造 XFF 绕过基于 IP 的 ACL"的文章。但我不得不说,you're so rigid. XFF 是 header,改个名字(X-Real-IP, X-Client-IP, etc)就不能被伪造了?

    对付伪造, @Reficul 所说的才是有效的解决方案。你需要的是白名单,即只接受(你所用 CDN 的)指定 IP 发来的请求中的 XFF。

    参考 Apache mod_remoteip 的 RemoteIPTrustedProxy 和 RemoteIPTrustedProxyList 参数
    Nginx 的 set_real_ip_from 参数。

    -------

    可算是把饭"喂到嘴"了,恁可以自己去查查文档吗?
    zhuzhenyu
        11
    zhuzhenyu  
       2019-06-25 20:16:08 +08:00   1
    问题来了,腾讯云 CDN 的 IPv4 和 IPv6 的 地址段是多少,想设置在信任列表里。腾讯云 CDN 文档中没有找到像 cloudflare 这样的 [IP Ranges]( https://www.cloudflare.com/ips/) 页面.
    .wwads-cn { border-radius: 3px !important; } .wwads-text { color: var(--link-color) !important; }
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5094 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 01:15 PVG 09:15 LAX 17:15 JFK 20:15
    Do have faith in what you're doing.
    ubao msn 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