問題:
私のウェブサイトが "I'm under attack"モード に設定されている場合、ユーザーがCloudFlare画面を通過すると、大きくてかなり長いクエリ取得パラメーターを使用して私のウェブサイトにリダイレクトされます。
?__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プッシュの状態(?)を通してこれまで誰かがこれに対処したことがありますか?
私はすでにこれについて CloudFlareに話しかけました を持っています。彼らは、古いシステムに問題があったため、これが今後どのように機能するかを述べました。残念ながら、これらのクエリパラメータは非常に醜く、いつもTwitchを見る煩わしさからTwitchを使い始めています;)
これらのパラメーターを処理して削除する方法に関するアドバイスはありますか?敬具
Cloudflareは分散型 リバースプロキシ です。すべての要求と応答は、Cloudflareのリバースプロキシを介してクリアテキストで送信されます。 __cf_chl_jschl_tk__
([〜#〜] c [〜#〜]loudflarechallenge /[〜#〜] j [〜#〜]avascriptchallengetoken)がプロキシのリダイレクトロケーションURLに追加され、Webサイトに到達する前にプロキシで削除されます。
JavaScriptでトークンを取り除こうとするかもしれませんが、その結果を理解することが重要です。リクエストでトークンが欠落している場合、Cloudflareはユーザーをボット対策チャレンジに何度も実行する可能性が高くなり、ユーザーエクスペリエンスが低下します。
DDoS緩和サービスは通常、これらの詳細を公に文書化しないため、それがどれほど正確に行われるかは謎のままです。