Проблема:
Когда мой веб-сайт установлен в режим «Я под атакой» , когда пользователь проходит экран CloudFlare, на который он перенаправляется мой сайт с большим и довольно длинным запросом получает параметр:
?__cf_chl_jschl_tk__=63c51316f61a63e46f1639d6cf43f9d9b536adea-1587754610-0-AV-peahelegQeMeSrc_4ZJBUq47gdkX_QiS2eERoRTEODUjwbib2MM_73nQDAhukLbkspNpj01mv-Z-JteR4MpY4LUMm-yLJrPQKTX74DGYbZIs2utbp3_q4uozgzKpqcax10YESVKDhZgaWQYHGqBL9koIoasVOzKyvU7VQuKT1Nieo-i8DdXrV0IQf-nyI8KgWnxhYSVBOc-4WNrZzHQlEXFOpV45AGs10aMJyrs376HLRhNdV05MCj8oqMrexuQDtY7B3p7riHByYdB7GIgc
Почему это плохо:
- Уродливая ссылка, распространенная в Интернете - (я уже видел это уже несколько раз)
- Я не могу перенаправить параметры получения - (Они недоступны для проверки, если установлено перенаправить)
- Уродливые URL - (Мы тратим много времени на написание чистых / красивых URL для наших приложений)
- На странице заданы данные POST - (вы не можете обновить sh без «повторной отправки» аутентификации 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 pu sh состояний (?) Кто-нибудь еще имел дело с этим раньше?
Я уже говорил с CloudFlare об этом уже, и они сказали, что так оно и будет работать отныне были проблемы с их старой системой. К сожалению, эти параметры запроса очень уродливы, и я начинаю дергаться от досады, постоянно видя их;)
Есть какие-нибудь советы о том, как обращаться с этими параметрами и избавляться от них? С уважением