解説
CAPTCHA とは、ウェブサイトがトラフィックを自動化されたものと判断した場合に表示されるボット検出チャレンジです。従来の形式は読み取りが必要な歪んだテキスト画像ですが、現代の形式には画像グリッドパズル(「信号機のあるマスをすべて選択」)、音声チャレンジ、およびページとのインタラクションを監視してチェックがあると気づく前に人間かボットかを判定する行動的・不可視 CAPTCHA があります。
現在の主要な CAPTCHA ベンダーは Google reCAPTCHA(v2、v3、およびエンタープライズティア)と hCaptcha で、どちらも Cloudflare や Akamai などのアンチボットスタックの背後で広く使用されています。Cloudflare は reCAPTCHA・hCaptcha の代替として独自の Turnstile チャレンジも提供しています。各システムは画像パズル、ブラウザフィンガープリンティング、マウス・キーボード操作の分析、および IP レピュテーションを異なる組み合わせで使用し、「人間らしさスコア」を計算します。
スクレイピングやデータ収集のワークフローにおいて、CAPTCHA チャレンジへの正しい対応は解くことではなく、そもそも発生させないことです。CAPTCHA はリクエストが疑わしく見える場合(データセンター IP、ヘッダーの欠如、フィンガープリントの不一致、急激なペーシング)に発動するため、最もクリーンな対策は基本的な衛生管理です。つまり、レジデンシャル・モバイル IP、最新のブラウザヘッダー、現実的なタイミング、そして適切な TLS フィンガープリントを使用することです。CAPTCHA が表示された場合は、新しい IP にローテーションすることでクリーンなパスに到達できることがほとんどです。
仕組み
リクエストが届くと、ウェブサイト(またはそのアンチボットベンダー)は次のようなシグナルを使用してリスクスコアを計算します: ソース IP の評判(データセンター?最近の不正使用?国?)、ブラウザのフィンガープリント(User-Agent、sec-ch-ua、画面サイズ、プラグイン)、TLS ハンドシェイクのフィンガープリント(JA3/JA4)、行動シグナル(マウスの動き、キーのタイミング、ページ滞在時間)、クッキー/トークンの過去の評判。
スコアが人間信頼しきい値を下回ると、システムはレスポンスに CAPTCHA チャレンジを挿入します。チャレンジでは、クライアントがタスク(テキストの読み取り、一致する画像のクリック、不可視の行動チェックの通過)を実行し、トークンをサーバーに送信する必要があります。有効なトークンがないと、サーバーはその後のリクエストを拒否します。