问题:
[当我的网站设置为"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
为什么这样不好:
建议的解决方案:
我想避免这种情况的方法是检查是否设置了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了,他们说从现在开始这将是这样的,因为他们的旧系统有问题。不幸的是,这些查询参数非常丑陋,这使我开始不时地看到它而烦恼;)
关于如何处理这些参数并摆脱它们的任何建议?亲切的问候
问题:当我的网站设置为“我受到攻击”模式时,一旦用户通过CloudFlare屏幕,他们将使用大型且相当长的查询get参数重定向到我的网站:?...
Cloudflare是分布式reverse proxy。您所有的请求和响应都通过Cloudflare的反向代理以明文形式传输。 __cf_chl_jschl_tk__
(C