ホスト名が Cloudflare 経由でプロキシされている場合、ウェブページで訪問者にチャレンジが表示されることがあります。
Cloudflare は、Turnstile を支えるのと同じ基盤技術である Challenge Platform を通じてチャレンジを発行します。
Challenge ページの提供内容とは異なり、Turnstile では Cloudflare の CDN を使わずに、サイト上の任意の場所で、より控えめな方法でチャレンジを実行できます。
Challenge は Microsoft Internet Explorer では利用できません。Internet Explorer を使っている場合は、別の現行ブラウザー(Chrome、Safari、Firefox)を試してください。すでに現行ブラウザーを使っている場合は、最新バージョンであることを確認してください。
訪問者の HTTP リクエストには、遷移元サイトを示す referer ヘッダーが含まれます。Challenge Page に遭遇して解くと、その referer 付きのリクエストがオリジンへ送られ、そのレスポンスがユーザーに返されます。レスポンスページ上の JavaScript が document.referer の値を読むことがありますが、正確ではありません。
たとえば、あるサイトから来た訪問者が、あなたのドメインが配信するインタースティシャル Challenge Page 経由で WAF ルール の Challenge を受けたとします。訪問者がサイトのホームページを読み込むと、document.referer の値は遷移元サイトではなく、あなたのドメインになります。
これは、JavaScript から referer を読む Google Analytics などのツールに影響します。訪問者が直前にいたサイトが上書きされるためです。
Challenge Page の中に、Google Tag Manager の JavaScript などのトラッキングスクリプトを追加すると、最初のリクエストで正しい referer ヘッダーを取得できます。
<script>
(function () {
const gaIds = {
"<YOUR_DOMAIN>": "<GA_TRACKING_ID>",
};
const gaId = gaIds[window.location.hostname];
if (gaId) {
const src = "https://www.googletagmanager.com/gtag/js?id=";
const gaScript = document.createElement("script");
gaScript.src = src.concat(gaId);
document.body.appendChild(gaScript);
window.dataLayer = window.dataLayer || [];
function gtag() {
dataLayer.push(arguments);
}
gtag("js", new Date());
gtag("config", gaId);
} else {
console.warn(
"Google Analytics ID not found for host:",
window.location.hostname,
);
}
})();
</script>
</body>Cross-origin resource sharing(CORS)のプリフライトリクエスト、つまり OPTIONS は、Cookie を含むユーザー認証情報を送りません。そのため cf_clearance Cookie が付与されず、Challenge Page(非インタラクティブ、Managed、インタラクティブ Challenge)をバイパスできません。
Cloudflare は、ボット攻撃や DDoS の試みなど、悪意のある活動から守るために、ウェブサイトの訪問者へ Challenge を発行します。正当な人間の訪問者が意図せず Challenge を受けた場合、原因はそのリクエストをセキュリティ機能がフラグしたことにあります。
| 要因 | 説明 |
|---|---|
| 高い脅威スコア | リスクの高いスコアの IP アドレスは Challenge の対象になります。 |
| IP レピュテーション | IP に不審な活動の履歴があると、フラグされることがあります。 |
| ボット検出 | ボットに似た自動トラフィックは Cloudflare がフィルタします。 |
| Web Application Firewall(WAF)カスタムルール | サイト所有者が、特定の地域やユーザーエージェントを対象にしたルールを設定していることがあります。 |
| Browser Integrity Check | Cloudflare は、ブラウザーが一定の基準を満たしているかを確認します。 |
| Challenge Passage | Privacy Pass などの技術により、繰り返し Challenge を受ける頻度が下がります。 |
繰り返し Challenge を受けないようにするため、訪問者は次の手順で、セキュリティチェックが発火しにくい環境にできます。
- Web ブラウザーを最新の安定版に更新し、現行の Challenge 技術と完全に互換になるようにします。
- 標準のブラウザーヘッダーや必要な Challenge スクリプトをブロックする可能性がある、広告ブロッカーやプライバシーツールなどのブラウザー拡張機能を一時的に無効にします。
- IP アドレスのレピュテーションが低い場合(共有 VPN や企業プロキシでよくあります)、信頼できる別のネットワーク接続に切り替えてみてください。
既知の検索エンジンクローラー、監視サービス、内部 API など、特定のリクエストに Block または Challenge アクションを適用したくない場合は、WAF カスタムルール で除外を設定する必要があります。
Cloudflare では、除外を作る主な方法が 2 つあります。
例外を作る最も確実な方法は、Skip アクションのカスタムルールを作成することです。一致したリクエストは、Bot Management やほかの WAF ルールを含む、特定のセキュリティ機能をバイパスできます。
例
望ましくないトラフィックが多いため Amazon Web Services(AWS)と Google Cloud Platform(GCP)をブロックしつつ、Cloudflare が検証する Googlebot やその他の既知のボットは許可します。
-
基本ルール(除外なし):
- Expression:
(ip.src.asnum in {16509 15169} and not cf.client.bot) - Action: Block(または Challenge アクション)
- Expression:
-
特定の IP アドレスをブロックまたは Challenge から除外するルール:
- Expression:
(ip.src.asnum in {16509 15169} and not cf.client.bot) and not (ip.src in {192.0.2.1 198.51.100.42 203.0.113.0/24}) - Action: Block(または Challenge アクション)
- Expression:
-
特定の IP では残りのカスタムルールをスキップし、それ以外をブロックする 2 つのルール。
-
ルール 1:
- Expression:
ip.src in {192.0.2.1 198.51.100.42 203.0.113.0/24} - Action: Skip > All remaining custom rules
- Expression:
-
ルール 2:
- Expression:
(ip.src.asnum in {16509 15169} and not cf.client.bot) - Action: Block(または Challenge アクション)
- Expression:
-
Block または Challenge ルールの式を絞り込み、IP リスト、国コード、ASN などの除外リストと論理 not 演算子を組み合わせて、既知の正常なトラフィックを直接除外できます。
単純な除外には向きますが、複雑なルールは、別の Skip ルールより保守しにくくなることがあります。
例
攻撃スコアを評価する Block または Challenge ルールから、複数の IP アドレスを除外します。
-
基本ルール(除外なし):
- Expression:
(http.host eq "example.com" and cf.waf.score lt 20) - Action: Block(または Challenge アクション)
- Expression:
-
特定の IP アドレスをブロック / Challenge から除外するルール:
- Expression:
(http.host eq "example.com" and cf.waf.score lt 20) and not (ip.src in {192.0.2.1 198.51.100.42 203.0.113.0/24}) - Action: Block(または Challenge アクション)
- Expression:
-
特定の IP では残りのカスタムルールをスキップし、それ以外をブロックする 2 つのルール。
-
ルール 1:
- Expression:
ip.src in {192.0.2.1 198.51.100.42 203.0.113.0/24} - Action: Skip > All remaining custom rules
- Expression:
-
ルール 2:
- Expression:
(http.host eq "example.com" and cf.waf.score lt 20) - Action: Block(または Challenge アクション)
- Expression:
-