課題
Cloudflareによって保護されたウェブサイトでは、訪問者のトラフィックに対していくつかの状況でチャレンジが発生します:
- 訪問者のIPアドレスがオンラインで疑わしい行動を示した(Project Honeypot ↗によって追跡されます)。
- ウェブサイトの所有者が訪問者のIPアドレスに関連付けられた国をブロックしています。
- 訪問者の行動がウェブサイトの所有者によって有効化されたWAFカスタムルールを発動させました。
訪問者がチャレンジを通過すると、そのリクエストは許可されます。失敗した場合、リクエストはブロックされます。
管理されたチャレンジは、Cloudflareがリクエストの特性に基づいて適切なタイプのチャレンジを動的に選択するものです。これにより、CAPTCHA ↗を回避でき、インターネット全体でCAPTCHAを解決するために費やされる人間の時間を減少させます。
特定の互換性の問題や他の理由がない限り、さまざまなカスタムルールには管理されたチャレンジを使用するべきです。
リクエストの特性に応じて、Cloudflareは適切なタイプのチャレンジを選択します。これには以下が含まれる場合がありますが、これに限定されません:
- 非対話型のチャレンジページ(現在のJSチャレンジに似ています)。
- カスタム対話型チャレンジ(ボタンをクリックするなど)。
- プライベートアクセス・トークン(最近のAppleオペレーティングシステムを使用)。
現在、管理されたチャレンジアクションは以下のセキュリティ製品で利用可能です:
- WAFカスタムルール
- レート制限ルール
- WAF管理ルール
- ボットファイトモード: Cloudflareボット製品により、アクションが取られたの管理されたチャレンジが表示されることがあります。
- HTTP DDoS攻撃保護
- IPアクセスルール
- ユーザーエージェントブロッキング
- ファイアウォールルール(非推奨)
- レート制限(旧バージョン、非推奨)
JSチャレンジでは、Cloudflareが訪問者からのインタラクションを必要としないチャレンジページを提示しますが、ブラウザによるJavaScript処理が必要です。
訪問者は、ブラウザがJavaScriptの処理を完了するまで待つ必要があります。これは5秒未満であるべきです。
インタラクティブチャレンジは、訪問者がチャレンジページと対話することを要求し、訪問者に解決するためのインタラクティブなチャレンジを提示します。Cloudflareはインタラクティブチャレンジの使用を推奨していません。
Cloudflareがインタラクティブチャレンジの使用を推奨しない理由については、ブログ ↗を参照してください。
アプリケーションがチャレンジを送信すると、訪問者は非対話型または対話型のチャレンジページを受け取ります。
訪問者が最新の主要ブラウザ(Chrome、Firefox、Safari、Microsoft Edge、モバイルのChromeおよびSafariなど)を使用している場合、チャレンジは正しく表示されます。
Microsoft Internet Explorerではチャレンジはサポートされていません。
訪問者がInternet Explorer以外の主要ブラウザで問題に直面した場合、ブラウザをアップグレードする必要があります。
ブラウザ拡張機能がある場合、それが通過不可能なチャレンジループを引き起こす可能性があります。修正するには、拡張機能を無効にしてページを再読み込みしてください。
デバイスエミュレーションがブラウザで有効になっている場合、チャレンジはサポートされません。たとえば、ブラウザの開発者ツールを使用している場合です。
訪問者がチャレンジに遭遇した場合、Cloudflareの従業員はそのチャレンジを削除することはできません。ウェブサイトの所有者のみがCloudflareの設定を構成して、チャレンジが提示されないようにできます。
Cloudflareチャレンジページを観察しているとき、訪問者は以下のことができます:
- チャレンジを成功裏に通過してウェブサイトにアクセスする。
- ウェブサイトの所有者に自分のIPアドレスを許可するように依頼する。
- 自分のコンピュータを悪意のあるプログラムのスキャンを行う(感染している可能性があります)。
- チャレンジリソース(たとえば、画像)へのアクセスをブロックしていないことを確認するために、自分のアンチウイルスまたはファイアウォールサービスを確認する。
リクエストが元々予想されていた応答の代わりにCloudflareチャレンジページに遭遇した場合、チャレンジページの応答(チャレンジページのタイプに関係なく)にはcf-mitigatedヘッダーが存在し、challengeに設定されます。このヘッダーは、fetch/XHRリクエストを行う際に応答がチャレンジされたかどうかを検出するために利用できます。このヘッダーは、応答がチャレンジであるかどうかを識別する信頼できる方法を提供し、ウェブアプリケーションが結果に基づいて適切なアクションを取ることを可能にします。たとえば、バックエンドからの応答に遭遇したフロントエンドアプリケーションは、このヘッダーの値の存在を確認して、予期しないチャレンジページに遭遇した場合の処理を行うことができます。
cf-mitigatedヘッダーに対して、challengeは唯一の有効な値です。このヘッダーはすべてのチャレンジページタイプに設定されます。
以下は、cf-mitigatedヘッダーを使用して応答がチャレンジされたかどうかを検出する方法を示すJavaScriptコードスニペットです:
fetch("/my-api-endpoint").then((response) => { if (response.headers.get("cf-mitigated") === "challenge") { // チャレンジされた応答を処理する } else { // 通常通り応答を処理する }});追加のヘルプについては、チャレンジに関するFAQを参照してください。
ユーザーがチャレンジページに提示されると、Cloudflareは人間であることを証明するために解決する必要があるチャレンジを決定します。一部のチャレンジは計算的に複雑であったり、インタラクティブである必要がありますが、提供されるチャレンジのほとんどはユーザーには見えません。
Cloudflareはプライベートアクセス・トークン(PAT)の結果を使用して、ユーザーが次にどのチャレンジを見るかを決定します。ユーザーがトークンを提示すると、チャレンジを解決するのが容易になります。
チャレンジページは中間ページであり、ユーザーは有効なPATを持っているかどうかに関係なくそれを目にします。PATはチャレンジを自動的に解決するものではありません。特定のチャレンジが発行されるのを防ぎます。
If your hostname is proxied through Cloudflare, visitors may experience challenges on your webpages.
Cloudflare issues challenges through the Challenge Platform, which is the same underlying technology powering Turnstile.
In contrast to our Challenge page offerings, Turnstile allows you to run challenges anywhere on your site in a less-intrusive way without requiring the use of Cloudflare’s CDN.
Cloudflareチャレンジプラットフォームは複数の言語を検出し、navigator.languageの値によって決定されるローカライズされたチャレンジ体験を表示できます。Navigator.languageの読み取り専用プロパティ ↗は、ユーザーの好ましい言語を表す文字列を返します。現在サポートされている言語は、英語、アラビア語、中国語(簡体字)、中国語(繁体字)、オランダ語、フランス語、ドイツ語、インドネシア語、イタリア語、日本語、韓国語、ペルシャ語/ファルシ、ポーランド語、ポルトガル語、ロシア語、スペイン語、トルコ語です。
Cloudflareのチャレンジは、GET /favicon.icoを使用してウェブサイトのファビコンを取得し、チャレンジページに表示します。
以下のHTMLスニペットを使用してファビコンをカスタマイズできます。
<link rel="shortcut icon" href="<FAVICON_LINK>" />チャレンジページで独自のコンテンツセキュリティポリシー(CSP)やリファラーポリシーをメタタグやTransform Rulesを介して設定することはできません。
チャレンジはMicrosoft Internet Explorerではサポートされていません。現在Internet Explorerを使用している場合は、別の最新のウェブブラウザ(Chrome、Safari、Firefox)を使用してみてください。すでに最新のウェブブラウザを使用している場合は、最新バージョンを使用していることを確認してください。
リファラーヘッダー付きでリクエストが送信されると、ユーザーはチャレンジページを応答として受け取ります。チャレンジページを解決すると、リファラー付きのリクエストがオリジンに送信され、そのリクエストに対する応答がユーザーに提供されます。応答ページのJavaScriptはdocument.refererの値を読み取ることができますが、それは不正確です。これは、JavaScriptからリファラーを読み取るGoogle Analyticsなどのツールに影響を与えます。
初回リクエストで正しいリファラーヘッダーをキャプチャするために、チャレンジページにトラッキングスクリプトを追加できます。
クロスオリジンリソースシェアリング(CORS)プリフライトリクエスト、またはOPTIONSは、クッキーを含むユーザー資格情報を除外します。その結果、cf_clearanceクッキーはリクエストと共に送信されず、チャレンジページ(非対話型、管理型、または対話型チャレンジ)をバイパスできなくなります。
Cloudflareのチャレンジは以下をサポートできません:
- ブラウザの
User-Agent値やCanvas、WebGLなどのWeb APIを変更するブラウザ拡張機能。 - ドメインが別のドメインに対して元々リクエストされたチャレンジページを提供する実装。
- チャレンジページはクロスオリジンのiframeに埋め込むことはできません。
- 管理されたチャレンジの解決リクエストが、チャレンジリクエストが発行された元のIPとは異なるIPから来るクライアントソフトウェア。たとえば、あるIPからチャレンジを受け取り、別のIPを使用してそれを解決すると、その解決は無効であり、チャレンジループに遭遇する可能性があります。