Scarnox · Blog

Cloudflare Turnstileの仕組みと解決方法(近日対応予定)

Cloudflare Turnstileは、通常は訪問者に何も求めないcaptchaです。ブラウザでチェックを実行し、多くの場合はパズルなしで通過します。確信が持てない場合は、短い対話的な手順を表示することもあります。その後、ウィジェットがフォームにトークンを書き込み、サイトはそのトークンをCloudflareに対して検証します。Turnstileに対するScarnoxのサポートは近日対応予定です。このガイドでは、ウィジェットの仕組み、他のチャレンジと混同されやすい理由、正当な作業での一般的なアプローチを説明します。

ウィジェットの埋め込み方

ページには、cf-turnstileクラスとdata-sitekey属性を持つコンテナ要素が含まれています。Turnstileのスクリプトが読み込まれてチェックを実行し、非表示の入力cf-turnstile-responseを追加します。その入力の値がトークンです。フォームはそのトークンを他のフィールドと一緒に送信し、サイトのバックエンドがシークレットキーとともにCloudflareの検証エンドポイントに送ります。

他のトークン型のウィジェットと同様に、検証はサーバー側で行われます。その欄に何の値を入れても受け付けてしまうフォームは、実際には保護されていません。

モードとスクリプトへの影響

Turnstileは複数のモードで動作できます。マネージドモードでは、対話的な手順を表示するかどうかをCloudflareが決めます。非対話モードでは、ウィジェットは訪問者に何も求めず、状態だけを表示します。インビジブルモードでは、何も表示されません。スクリプトにとっては、モードによってページ上で見えるものが変わりますが、結果は同じです。フォームフィールドにトークンが入り、サーバーで検証されます。

トークンは寿命が短く、1回だけ使えます。ウィジェットがトークンを生成したら、なるべく早くフォームを送信し、すでに検証されたトークンを再利用しないでください。

ボット検出の理由

Turnstileは、ブラウザ環境からのシグナルと、セッションの振る舞いを見ています。標準設定のヘッドレスブラウザ、欠けているか一貫しないブラウザ機能の組み合わせ、履歴のない新しいセッション、不審なネットワークアドレスは、いずれもチャレンジやブロックの判断を引き寄せる可能性があります。これらのシグナルは他のスコアベースのチェックと同じ系統のものであり、そのため対処のアプローチも似ています。

正当なアプローチ

正当な作業で有効なアプローチは次のとおりです。

  1. Turnstileを読み込むページには、本物のブラウザを使う。 一貫した設定の通常のブラウザプロファイルは、素の自動化ビルドよりもチャレンジされにくくなります。よくあるシグナルはヘッドレスブラウザ検出のガイドで一覧にしています。
  2. セッションを維持する。 ワークフローのページをまたいでCookieを保持し、訪問者がリクエストごとに新規に見えないようにします。
  3. リクエストのペースを守る。 人間らしい一定のペースは、どんな小手先の技よりもチャレンジを減らします。
  4. 保護されたサイトのルールを先に確認する。 保護されたサイトの多くは、APIやフィードを公開しています。ブラウザのワークフローを組む前に確認してください。Cloudflareで保護されたサイトのスクレイピングのガイドで、このアプローチをより深く扱っています。
  5. 開発ではテスト用のキーを使う。 Cloudflareは開発用のテストサイトキーを公開しています。これは予測可能な結果を返し、実際のチェックは行いません。自分の統合テスト用であり、本番のトラフィックには使わないでください。
  6. 運営者に相談する。 自分がサイトを運営しているなら、自動テストが使うパスについてTurnstileの設定を調整できます。運営していないなら、allowlistかAPIを依頼してください。

Turnstileのソルバーが行うこと

トークン型のTurnstileソルバーは、サイトキーとページURLを受け取り、cf-turnstile-responseフィールド用の有効なトークンを作って、あなたのコードに返します。あなたのコードはそのトークンをフォームに書き込み、速やかに送信します。これは、ライブのPopularCaptchaの連携と同じパターンで、タスクの種類だけが異なります。

Scarnoxは現在、Turnstileをライブで解決していません。現在ライブのタスクの種類はPopularCaptcha(プロキシなし)のみです。Turnstileは近日対応予定で、そのリクエストの詳細は、対応が始まったときにAPIリファレンスに掲載されます。それまでは、想定したインターフェースに基づいて構築しないでください。

よくある間違い

Turnstileの連携は、いくつかの予測可能な形で失敗します。最も多いのは、期限切れのトークン、または検証済みのトークンを使うことです。トークンは1回限りなので、フォームの送信が失敗した後の再試行には、古い値ではなく、新しいウィジェットの結果が必要です。2つ目は、別の環境のサイトキーを使うことです。開発用のキーを本番のページで使う、またはその逆をすると、コードのバグに見える検証の失敗が起きます。デバッグを始める前に、ページがどのキーを使っているかを確認してください。

もう1つのよくある間違いは、対話的な手順を失敗とみなすことです。マネージドモードでは、一部の訪問者に短い手順が表示されることがあり、サイレントな合格を想定しているスクリプトはそこで止まってしまいます。ウィジェットの結果を待ち、さらに求められた場合も扱えるようにフローを組んでください。

最後に、フィールド名を実際のページで確認せずに、ハードコードしないでください。cf-turnstile-responseの入力が標準ですが、サイトによってはウィジェットを別の形で囲んでいることもあります。推測するよりも、描画されたフォームを読むほうが速いです。

責任あるスクレイピング

Turnstileで保護されたサイトのスクレイピングは一般的な作業であり、他のスクレイピングと同じ注意が必要です。robots.txtと利用規約を確認してください。リクエストの頻度は低く保ち、必要のない個人データは収集しないでください。APIがあるサイトでは、APIを優先してください。主な論点はWebスクレイピングは合法かで扱っています。

準備

アカウントを作成すると、無料のトライアルクレジットで始められます。カード登録は不要です。Turnstileのサポートが始まれば、実際のサイトに対して何かを実行する前に、自分のページでテストできるようになります。

次のステップ