处理CloudFlare的:cf_chl_jschl_tk &cf_chl_captcha_tk?

问题描述 投票:3回答:1

的问题。

当我的网站设置为 "我受到攻击 "模式一旦用户通过CloudFlare屏幕,他们就会被重定向到我的网站,并有一个大而长的查询获取参数。

?__cf_chl_jschl_tk__=63c51316f61a63e46f1639d6cf43f9d9b536adea-1587754610-0-AV-peahelegQeMeSrc_4ZJBUq47gdkX_QiS2eERoRTEODUjwbib2MM_73nQDAhukLbkspNpj01mv-Z-JteR4MpY4LUMm-yLJrPQKTX74DGYbZIs2utbp3_q4uozgzKpqcax10YESVKDhZgaWQYHGqBL9koIoasVOzKyvU7VQuKT1Nieo-i8DdXrV0IQf-nyI8KgWnxhYSVBOc-4WNrZzHQlEXFOpV45AGs10aMJyrs376HLRhNdV05MCj8oqMrexuQDtY7B3p7riHByYdB7GIgc

enter image description here

为什么会这样?

  • 丑陋的链接在网上共享 屡见不鲜
  • 我无法将获取参数重定向走-- (如果设置为重定向,则无法查看)
  • 丑陋的URLs - (我们花了很多时间为我们的应用程序编写干净漂亮的URLs)
  • POST数据设置在页面上 - (如果没有 "重新提交 "CF认证,就不能刷新)

建议的解决方案。

我看到的避免这种情况的方法是检查是否设置了获取参数,然后重定向回同一页面,并删除参数。(如果设置了参数,确保不会丢失任何其他查询参数)

我已经写了一个函数来实现这个功能。

function checkAndRemoveCloudFlareParams() {
    if (isset($_GET['__cf_chl_jschl_tk__']) && ! empty($_GET['__cf_chl_jschl_tk__'])
     || isset($_GET['__cf_chl_captcha_tk__']) && ! empty($_GET['__cf_chl_captcha_tk__'])) {

        $new_uri = '?';
        $uri = explode('?', $_SERVER['REQUEST_URI']);
        $uri = $uri[0];

        // Get any other params to put back on later
        foreach ($_GET as $key => $var) {
            if ($key !== '__cf_chl_jschl_tk__' && $key !== '__cf_chl_captcha_tk__') {
                $new_uri .= $key . '=' . $var . '&';
            }
        }

        if ($new_uri !== '?') {
            $new_uri = rtrim($new_uri, '&');
            $uri .= $new_uri;
        }

        header('Location: ' . $uri);
        die;
    }
}

当我在本地通过手动输入_GET参数进行测试时,该函数可以正常工作。然而,当部署到我的实时站点时,当直接从 CloudFlare 加载时,_GET 查询参数不存在或无法访问。我相信CloudFlare会在页面加载后添加参数?也许是通过 Javascript 推送状态(?),其他人之前是否处理过这种情况?

我有 与CloudFlare谈过 他们说这是他们旧系统的问题,所以从现在开始就会这样工作。不幸的是,这些查询参数非常丑陋,让我开始因为一直看到它而烦躁不安;)

有任何关于如何处理这些参数和摆脱它们的建议吗?亲切的问候

php cloudflare ddos
1个回答
1
投票

Cloudflare是一个分布式 反向代理. 您的所有请求和响应都是通过Cloudflare的反向代理以明文形式传输的。该 __cf_chl_jschl_tk__ (C高声f孤零零 chal凌格 J珍珠s脚本 chal凌格 token)被添加到代理的重定向位置URL中,并在到达您的网站之前在代理处被剥离。

你可以尝试用Javascript摆脱令牌,但是,了解后果很重要。如果在请求中缺少令牌,Cloudflare将更有可能让你的用户一次又一次地经历反僵尸挑战,导致用户体验不佳。

不过具体有多大可能做到这一点仍然是个谜,因为DDoS缓解服务通常不会公开记录这些细节。

© www.soinside.com 2019 - 2024. All rights reserved.