reCAPTCHA v2
と CapMonster Cloud

キャプチャの解決、サイトへの実装、エンドツーエンドのテストを一つの手順で。

reCAPTCHA V2ソリューションの価格

キャプチャ
価格 (USD)
$ 0.60
1000トークン
キャプチャや防御機構が導入済みのサイトを引き継いだのに、ソースコードへアクセスできない? その場合、どの仕組みが入っているのか、設定は正しいのか、どう検証するのかが気になります。

この記事では、よくある疑問にできるだけお答えしました。まず最初のステップは、どのような保護システムが使われているかを特定することです。そのために、代表的なキャプチャやボット対策システムの一覧を参照できます。ここには、どの仕組みが使われているかを素早く見分けるための画面イメージや主な特徴がまとめられています。

もしサイトで reCAPTCHA V2 が使われていることが分かったら、次のステップはその特徴と動作をより詳しく確認することです。同じこの記事の中で、reCAPTCHA V2 をサイトに導入するための手順書も確認できるので、あなたのサイト上でどのように機能しているのかをしっかり理解できます。これにより、現在の保護を正しく把握できるだけでなく、今後の運用や保守も計画的に行えるようになります。

Google reCAPTCHA v2 とは
Google reCAPTCHA v2 とは
reCAPTCHA v2 は Google が提供する保護システムで、サイトに害を与えるスパムや自動化された動作を防ぐために設計されています。実際の訪問者とボットを見分けることで、Web リソースの安全性と安定性を保ちます。
Background
reCAPTCHA V2 の例
reCAPTCHA v2
reCAPTCHA v2
ユーザーが自分が人間であることをチェックボックスで確認する古典的なキャプチャです。必要に応じて、特定の画像を選ぶなど追加の課題が表示される場合があります。
reCAPTCHA v2 Invisible
reCAPTCHA v2 Invisible
ユーザー操作なしで自動的に検証が行われる不可視バージョンで、チェックボックスをクリックする必要はありません。
reCAPTCHA v2 Enterprise
reCAPTCHA v2 Enterprise
追加の制御機能を備えたエンタープライズ向けバージョンです。

CapMonster Cloud で reCAPTCHA v2 を解く方法

reCAPTCHA V2 を含むフォームをテストする際は、キャプチャが正しく組み込まれ機能しているか確認する必要があります。

サイトに埋め込まれたキャプチャを手動で確認する方法

  • フォームのページを開き、キャプチャが表示されることを確かめます。
  • 解決せずにフォーム送信を試みると、サーバーはエラーを返すはずです。
  • 正しく解決した後は、問題なく送信できる必要があります。

自動解決には CapMonster Cloud のようなツールを使うと便利です。キャプチャのパラメータを送信すると、サーバー側で処理して利用可能なトークンを返してくれます。そのトークンをフォームに挿入すれば、ユーザー操作なしでチェックを通過できます。

CapMonster Cloud API を使った一般的な手順:

タスクの作成タスクの作成
arrow
API リクエストの送信API リクエストの送信
arrow
結果の受信結果の受信
arrow
トークンをページへ適用トークンをページへ適用
arrow
既製ライブラリで reCAPTCHA v2 を解く
CapMonster Cloud には PythonJavaScript (Node.js)、C# 向けの SDK が用意されており、すぐに利用できます。
Python
JavaScript
C#
解答、トークン挿入、フォーム送信まで
Node.js で実装したサンプルで、ウェブページ上のキャプチャ解決の全工程をカバーします。HTML とキャプチャパラメータを HTTP で取得して解答を送る方法、あるいは Playwright などの自動化ツールでページを開きキャプチャを待ち、(正しい/誤った)パラメータを送って結果を CapMonster Cloud クライアントから受け取り、トークンをフォームに挿入して挙動を確認する方法などがあります。
// npm install playwright @zennolab_com/capmonstercloud-client
// npx playwright install chromium


const { chromium } = require('playwright');
const { CapMonsterCloudClientFactory, ClientOptions, RecaptchaV2Request } = require('@zennolab_com/capmonstercloud-client');

(async () => {
  const browser = await chromium.launch({ headless: false });
  const page = await browser.newPage();

  const TARGET_URL = 'https://lessons.zennolab.com/captchas/recaptcha/v2_simple.php?level=high';
  const WEBSITE_KEY = '6Lcg7CMUAAAAANphynKgn9YAgA4tQ2KI_iqRyTwd';
  const CMC_API_KEY = 'your_capmonster_cloud_api_key';

  const cmc = CapMonsterCloudClientFactory.Create(new ClientOptions({ clientKey: CMC_API_KEY }));

  await page.goto(TARGET_URL, { waitUntil: 'domcontentloaded' });

  // キャプチャの解答処理
  const solution = await cmc.Solve(new RecaptchaV2Request({ websiteURL: TARGET_URL, websiteKey: WEBSITE_KEY }));
  const token = solution.solution.gRecaptchaResponse;

  // トークンを挿入しフォームを送信(必要なセレクターに置き換え)
  await page.evaluate((t) => {
    const ta = document.querySelector('textarea#g-recaptcha-response');
    if (ta) ta.value = t;
    document.querySelector('form.formular')?.submit();
  }, token);

  console.log('キャプチャが解け、フォームが送信されました!');
})();
reCAPTCHA v2 をサイトに組み込む方法
サイト上での動作を理解し、検証ロジックや再設定の流れを把握するにはこのセクションを確認してください。保護のセットアップ手順を網羅しており、要点をすばやく押さえられます。

1. reCAPTCHA 管理コンソールにアクセスします。

2. 新しいサイトを登録。

reCAPTCHA v2(チェックボックス+課題、または不可視タイプ)を選択します。

HowTo Connect image 1

3. 2 つのキーを取得:

  • Site key — フロントエンドで使用する公開キー;
  • Secret key — サーバー側で検証に使う秘密キー。

HowTo Connect image 2

設定画面で reCAPTCHA を利用できるドメインや、利用するセキュリティレベル(簡易~高セキュリティ)を指定できます。

4. クライアント側コードの例。 reCAPTCHA v2 を埋め込んだ HTML フォーム(ページ本文にそのまま貼り付け可能):

reCAPTCHA v2 付き HTML フォームreCAPTCHA v2 付き HTML フォーム
arrow

5. サーバー側で応答を検証。

PHP の例PHP の例
arrow
Background
想定されるエラーとデバッグ
Bug Icon
無効なサイトまたはキー
キャプチャが読み込まれない、または invalid-input-secret を返します。
Bug Icon
解答タイムアウト
サーバーが時間内に結果を受け取りませんでした。タイムアウトを延長してください。
Bug Icon
空のトークン
結果をページへ渡す際にエラーが発生しました。
Bug Icon
Response success=false
トークンが期限切れ、再利用、あるいは改ざんされました。リクエストログを有効にし、Google が返す error-codes フィールドを確認してください。
保護の堅牢性チェック
統合後は、システムが本当に自動化された操作からサイトを守れているか確認しましょう。
セキュリティと最適化のヒント
<span class="font-bold">Secret Key</span>はサーバー側のみに保存し、クライアント側には決して渡さないでください。
なぜ特定の検証が失敗したのかを把握できるように、エラーコード<span class="font-bold">(error-codes)</span>をログに記録してください。
フォーム下部に、ライセンス要件どおり<span class="font-bold">プライバシーポリシー</span>と<span class="font-bold">Google 利用規約</span>へのリンクを追加してください。
まとめ

すでにキャプチャや別の保護システムが導入されているサイトを引き継いだものの、コードにはアクセスできない場合でも心配はいりません!どの技術が使われているかを特定するのはそれほど難しくありません。動作が正しいか確認するには、隔離されたテスト環境で認識サービスCapMonster Cloudを利用し、トークン処理の仕組みと検証ロジックが正しく機能しているかをチェックできます。

reCAPTCHA V2の場合も、システムを特定し、その挙動を調べて、保護機能が正しく動いていることを確認すれば十分です。この記事では、reCAPTCHA V2を見分ける方法と、その導入や再設定に関する手順書の見つけ方を紹介しました。これにより、防御を安心して維持し、その動作をしっかりと管理できます。

Conclusion

reCAPTCHA v2 に関するよくある質問

解決リクエストを送信するには、https://api.capmonster.cloud/createTask に JSON で POST します:

{
  "clientKey": "API_KEY",
  "task": {
    "type": "RecaptchaV2Task",
    "websiteURL": "[target_page_URL_with_reCAPTCHA]",
    "websiteKey": "[reCAPTCHA_website_key]"
  }
}
  • clientKey — CapMonster Cloud アカウントの API キー
  • task.type:RecaptchaV2Task に設定
  • task.websiteURL:キャプチャが表示されるページの URL
  • task.websiteKey:ページ HTML に埋め込まれた公開 sitekey

次のステップについては、reCAPTCHA 解決ドキュメントをご覧ください。

前の質問で説明したパラメータで https://api.capmonster.cloud/createTask にタスクを送信します。

clientKey と taskId(createTask レスポンスで返却)を使って https://api.capmonster.cloud/getTaskResult をポーリングします。

status フィールドが ready になると、レスポンスに gRecaptchaResponse 文字列が含まれます — これが解決済みトークンです。

reCAPTCHA v2 の種類とサイトの構成に応じ、次のいずれかの方法でトークンを対象サイトに送信します:

  • 標準 DOM インジェクション:一般的なチェックボックス統合では、非表示テキスト領域にトークンを注入します(例:document.getElementById("g-recaptcha-response").innerHTML = token;)。Playwright の page.evaluate()(または Puppeteer/Selenium の同等機能)を使用し、その後 form.submit() をプログラムで呼び出すか送信ボタンをトリガーします。
  • JavaScript コールバック(インビジブル reCAPTCHA):ページがコールバック付きインビジブルキャプチャを使用している場合、data-callback 属性の関数名を特定し、自動化スクリプトからトークンを引数として渡して実行します(例:onVerifyCallback("TOKEN_STRING"))。
  • 直接 HTTP リクエスト:ブラウザレンダリングを回避するには、サイトのネイティブ送信リクエストを傍受し、HTTP クライアントでフォームデータの一部として(例:g-recaptcha-response=TOKEN_STRING)バックエンドに直接トークンを送信します。

対象サーバーは送信からトークンを抽出し、Google の siteverify エンドポイントで検証します。

CapMonster Cloud は同じ API 呼び出しで両方のモードに対応します。インビジブルモードでは、createTask リクエストに isInvisible: true パラメータを含めます。reCAPTCHA 解決を正しく確認するには、サイトがトークンを送信する方法を特定してください。これらの方法は前の質問で説明しています。

最も一般的な原因は、既に使用済みまたは期限切れのトークンです — reCAPTCHA v2 トークンは使い捨てで短命のため、遅延や重複送信でこれが発生します。まず https://www.google.com/recaptcha/api/siteverify からの生 HTTP レスポンスをログに記録してください — そのレスポンスの error-codes 配列が主要な診断シグナルです。

他に2つの一般的な原因:invalid-input-secret はバックエンドに誤ったシークレットキーが渡されたことを意味し、サーバー側で g-recaptcha-response フィールドが空の場合は、フォーム送信前にフロントエンドのトークン注入が静かに失敗したことが多いです。

また、CapMonster Cloud に渡した websiteURL が Google がトークンを検証する origin と完全に一致しているか確認してください — 不一致はドメインバインディングエラーを引き起こします。

非技術ユーザー向け:CapMonster Cloud ブラウザ拡張機能(Chrome/Firefox)を使用します。ページ上で直接キャプチャの動作をテストし、解決プロセスをリアルタイムで確認できます。拡張機能をインストールし、API キーを追加して、reCAPTCHA で保護されたページを開いてください。

QA と DevOps 向け:次の3ステップの簡単なテストを実施します:

  1. キャプチャを解かずにフォームを送信 — success: false が返るはずです。
  2. 解決済みキャプチャでフォームを送信 — リクエストは成功するはずです。
  3. 負荷テスト(k6 または JMeter、100+ RPS)を実行し、期限切れまたは再利用されたトークンが正しく拒否されることを確認します(例:HTTP 403)。

重要:siteverify は常に HTTP 200 を返します — エラーは HTTP ステータスコードではなく success フィールドで判断されます。