gpt4 book ai didi

php - 处理CloudFlare的: cf_chl_jschl_tk & cf_chl_captcha_tk?

转载 作者:行者123 更新时间:2023-12-03 09:27:31 24 4
gpt4 key购买 nike

问题:

当我的网站设置为"I'm under attack" mode时,一旦用户通过CloudFlare屏幕,他们将使用大型且较长的查询get参数重定向到我的网站:

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

enter image description here

为什么这样不好:
  • 丑陋的链接在线共享-(我已经看到过几次了)
  • 我无法重定向get参数-(无法访问以检查是否设置为重定向)
  • 丑陋的网址-(我们花很多时间为应用程序编写干净/漂亮的网址)
  • 在页面上设置了
  • POST数据-(如果不“重新提交” CF认证,则无法刷新)

  • 建议的解决方案:

    我想避免这种情况的方法是检查是否已设置get参数,然后重定向到删除了参数的同一页面。 (确保已设置,不要丢失任何其他查询参数)

    我写了一个函数来实现这一点:
    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参数在本地测试时,它可以工作。但是,当部署到我的实时站点时,_GET查询参数不存在,或者直接从CloudFlare加载时无法访问。我相信CloudFlare在页面加载后会添加参数吗?也许通过Javascript推送状态(?)之前有人处理过吗?

    我已经对此有了 spoken to CloudFlare,他们说这是从现在开始的工作方式,因为他们的旧系统有问题。不幸的是,这些查询参数非常丑陋,使我开始不时地看到它。

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

    最佳答案

    JS解决方案:

    history.replaceState && history.replaceState(
    null, '', location.pathname + location.search.replace(/[\?&](__cf_chl_jschl_tk__|__cf_chl_captcha_tk__)=[^&]+/, '').replace(/^&/, '?')
    );

    关于php - 处理CloudFlare的: cf_chl_jschl_tk & cf_chl_captcha_tk?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61415857/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com