web-dev-qa-db-ja.com

CloudFlareの扱い:cf_chl_jschl_tk&cf_chl_captcha_tk?

問題:

私のウェブサイトが "I'm under attack"モード に設定されている場合、ユーザーがCloudFlare画面を通過すると、大きくてかなり長いクエリ取得パラメーターを使用して私のウェブサイトにリダイレクトされます。

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

enter image description here

なぜこれが悪いのか:

  • オンラインで共有されている醜いリンク-(これはすでに数回起こっているのを見てきました)
  • Getパラメータを離れてリダイレクトできない-(リダイレクトするように設定されているかどうかを確認するためにアクセスできません)
  • 醜いURL-(私たちはアプリケーションのためにきれいな/きれいなURLを書くのに多くの時間を費やしています)
  • ページに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プッシュの状態(?)を通してこれまで誰かがこれに対処したことがありますか?

私はすでにこれについて CloudFlareに話しかけました を持っています。彼らは、古いシステムに問題があったため、これが今後どのように機能するかを述べました。残念ながら、これらのクエリパラメータは非常に醜く、いつもTwitchを見る煩わしさからTwitchを使い始めています;)

これらのパラメーターを処理して削除する方法に関するアドバイスはありますか?敬具

5
Jack

Cloudflareは分散型 リバースプロキシ です。すべての要求と応答は、Cloudflareのリバースプロキシを介してクリアテキストで送信されます。 __cf_chl_jschl_tk__[〜#〜] c [〜#〜]loudflarechallenge /[〜#〜] j [〜#〜]avascriptchallengetoken)がプロキシのリダイレクトロケーションURLに追加され、Webサイトに到達する前にプロキシで削除されます。

JavaScriptでトークンを取り除こうとするかもしれませんが、その結果を理解することが重要です。リクエストでトークンが欠落している場合、Cloudflareはユーザーをボット対策チャレンジに何度も実行する可能性が高くなり、ユーザーエクスペリエンスが低下します。

DDoS緩和サービスは通常、これらの詳細を公に文書化しないため、それがどれほど正確に行われるかは謎のままです。

1
ximaera