reCAPTCHA v2 と v3 の比較 検証エラーの原因、対処
更新日:2025/03/11

reCAPTCHAとは
reCAPTCHA(リキャプチャ)は、Googleが提供する、ウェブサイトをスパム攻撃などのボット(自動化されたプログラム)による不正アクセスから守るためのサービスです。
お問い合わせフォームやログイン画面などでよく見かける「私はロボットではありません」のチェックボックスがreCAPTCHAです。ウェブサイトの安全性を保つために非常に重要な役割を果たしています。
PHP での reCAPTCHA V2 と V3 の設定方法
ReCAPTCHA V2
フロントエンド実装(重要部分)
<!-- 1. これだけでチェックボックスが表示される -->
<div class="g-recaptcha" data-sitekey="あなたのサイトキー"></div>
<!-- 2. APIスクリプトの読み込み -->
<script src="https://www.google.com/recaptcha/api.js" async defer></script>
バックエンド検証(重要部分)
<?php
// 1. フォームからのトークン取得
$recaptchaResponse = $_POST['g-recaptcha-response'];
// 2. Google APIへのリクエスト準備
$url = 'https://www.google.com/recaptcha/api/siteverify';
$data = [
'secret' => 'あなたのシークレットキー', // 重要:非公開にすること
'response' => $recaptchaResponse
];
// 3. APIリクエスト実行と結果取得
$response = file_get_contents($url . '?' . http_build_query($data));
$result = json_decode($response);
// 4. 単純な成功/失敗の判定
if ($result->success) {
// 検証成功の処理
} else {
// 検証失敗の処理
}
?>
ReCAPTCHA V3
フロントエンド実装(重要部分)
<!-- 1. 隠しフィールドの準備(ユーザーには見えない) -->
<input type="hidden" id="g-recaptcha-response" name="g-recaptcha-response">
<!-- 2. APIスクリプトの読み込み(サイトキー付き) -->
<script src="https://www.google.com/recaptcha/api.js?render=あなたのサイトキー"></script>
<!-- 3. JavaScriptでトークン取得 -->
<script>
grecaptcha.ready(function() {
// アクション名の指定(バックエンドでも確認する)
grecaptcha.execute('あなたのサイトキー', {action: 'フォーム送信'})
.then(function(token) {
// トークンを隠しフィールドにセット
document.getElementById('g-recaptcha-response').value = token;
});
});
</script>
バックエンド検証(重要部分)
<?php
// 1. V2と同様にAPIリクエスト(省略)
// 2. V3特有の検証
if ($result->success) {
// アクション名の確認(重要)
if ($result->action === 'フォーム送信') {
// スコアチェック(0.0〜1.0、高いほど人間らしい)
if ($result->score >= 0.5) {
// 十分なスコアで検証成功
} else {
// スコア不足(ボットの可能性)
}
} else {
// アクション名不一致(不正リクエストの可能性)
}
}
?>
実装時の最重要ポイント
- シークレットキーの保護: バックエンドのコードにのみ記述し、フロントエンドのJavaScriptに記述しない
- V3のアクション名: フロントエンドとバックエンドで一致させる
- V3のスコアしきい値: サイトの性質に応じて0.1〜0.9の間で調整(0.5が一般的)
- エラー処理: API通信エラーも適切に処理する
- HTTPS環境: reCAPTCHAはHTTPS環境での使用が推奨される
これらのポイントを押さえることで、効果的にreCAPTCHAを実装できます。
reCAPTCHAのバージョンの違い
バージョン | 特徴 | メリット | デメリット | 適した用途 |
---|---|---|---|---|
reCAPTCHA v3 | – 完全バックグラウンドで動作 – スコア判定でbotと人間を区別 | – ユーザー操作不要 – 離脱率が低い | – 精度に限界がある – 設定にはデータ分析が必要 | ユーザビリティ重視 お問い合わせフォーム ECサイト |
reCAPTCHA v2 | – 「私はロボットではありません」のチェックボックス – 必要に応じて画像認証を追加 | – 高いセキュリティ – 導入が簡単 | – ユーザー操作が必要 – 離脱率が上がる可能性 | 会員登録フォーム 高セキュリティ |
reCAPTCHA v2 Invisible | – 非表示型の認証 – ボタン操作時に自動判定 – 必要に応じて画像認証を追加 | – 通常はユーザー操作不要 – セキュリティとユーザビリティのバランスが良い | – 疑わしい場合に画像認証が発生 | バランス重視のフォーム |
reCAPTCHA設定方法

-
検索
(例) debug search etc.. -
カテゴリー
-
mixhostでのWordPress利用について
更新日:2024/04/02
299 view
-
scrollHint
更新日:2024/03/13
249 view
-
XML Sitemap Generator for Google不具合のダウングレード対応、代替プラグイン
更新日:2024/06/13
235 view
-
【SnowMonkey】納品までのフローまとめ
更新日:2025/02/15
163 view
-
ワードプレスでフォントを変えたいとき、プラグインを使えば初心者でも簡単
更新日:2025/02/16
144 view
-
【Googleサーチコンソール】検索画面で表示させたくない「Googleのインデックス削除」
更新日:2024/06/07
129 view
-
【ショートコード】編集画面で任意の場所にHTMLファイルを挿入
更新日:2024/01/26
122 view
-
キーワード検索で上位表示させる方法【SEO】
更新日:2023/10/28
120 view
-
tailwindcss使い方
更新日:2024/03/13
120 view
-
Recline: GitHub Copilotで動作するClaude 3.5 Sonnet搭載の開発支援ツール
更新日:2025/01/20
110 view
-
WordPressプラグイン「All-in-One WP Migration」のトラブル
更新日:2022/03/31
84 view
-
ワードプレスセキュリティー対策まとめ【2025年】「site guard wordpress」「BackWPup バージョン5でUI変更!?」
更新日:2025/02/25
76 view
-
SSHを使用してGitHubのリポジトリをクローン、複数の接続元で公開鍵をディレクトリで区別する方法
更新日:2025/01/13
47 view
-
VSCodeで開発効率を劇的に向上させる!Roo-Clineプラグイン完全ガイド【Gemini API】
更新日:2025/02/08
41 view
-
「JSONスキーマ」と「Few-shot Learning」で実現する次世代生成AIソフトウェア開発の可能性
更新日:2025/02/12
40 view
-
WordPressの無料画像素材のおすすめダウンロードサイト!
更新日:2022/02/22
35 view
-
リファクタリング【VSCode Javasctipt Python】
更新日:2025/03/09
35 view
-
形態素解析とは?初心者でもわかるツールの使い方と実践例
更新日:2025/02/08
33 view
-
【Next.js AWS】音声文字起こし&要約、分析アプリケーション(S3)(Transcribe)(Amazon Bedrock)
更新日:2025/02/13
30 view
-
VSCodeプラグイン「 Pretter – Code formatter」「PHP Intelephense 」
更新日:2025/01/06
26 view