スパム対策は、フォームを運営する際に欠かせない要素です。特に、スパムボットによる自動送信を防ぐためにGoogleの提供する「reCAPTCHA」を活用するのは有効な手段の一つです。本記事では、WordPressプラグイン「Contact Form 7」と手動でPHPを使う2つの方法でreCAPTCHAを実装する手順を解説します。
reCAPTCHAとは?
reCAPTCHAはGoogleが提供するスパム対策ツールで、フォームの送信時に人間とボットを識別する機能を持っています。種類として以下があります:
- reCAPTCHA v2: チェックボックスをクリックするタイプ。
- reCAPTCHA v3: ユーザー操作を不要にしてスコアで判定。
- Invisible reCAPTCHA: 非表示で動作するタイプ。
reCAPTCHA v2とv3の違い
特徴 | reCAPTCHA v2 | reCAPTCHA v3 |
---|---|---|
操作性 | チェックボックスのクリックが必要 | 完全自動でユーザー操作が不要 |
判定方法 | ユーザーのアクションに基づく | スコア(0.0〜1.0)で信頼度を数値化 |
適用例 | 小規模なフォームやシンプルな使用場面 | 大規模なシステムやユーザー体験を損なわない用途 |
本記事では、最新技術でユーザー体験を向上させるreCAPTCHA v3を例に解説します。
Contact Form 7でのreCAPTCHA v3実装
1. Google reCAPTCHAの登録
- Google reCAPTCHAの公式サイトにアクセスし、Googleアカウントでログインします。
- 「サイトを登録」ボタンをクリックし、以下の情報を入力します:
- ラベル: サイトを識別するための名前。
- reCAPTCHAの種類: v3を選択します。
- ドメイン: 使用するドメインを入力します。
- 「登録」ボタンをクリックすると、サイトキーとシークレットキーが生成されます。
2. WordPressでの設定
- WordPress管理画面にログインし、左メニューから「お問い合わせ」>「インテグレーション」を選択します。
- reCAPTCHAの項目で「インテグレーションのセットアップ」をクリックし、Googleで取得したサイトキーとシークレットキーを入力します。
- 設定を保存します。
3. フォームにreCAPTCHAを追加
reCAPTCHA v3はフォームに目に見えるチェックボックスが表示されないため、特別なショートコードは不要です。フォーム送信時に自動的にスコア判定が行われます。
4. 動作確認
実際にフォームを送信して、reCAPTCHAが正常に動作しスコアが適切に計測されていることを確認します。
PHPでのreCAPTCHA v3実装
1. Google reCAPTCHAの登録
Contact Form 7の手順と同様に、Google reCAPTCHAの公式サイトでサイトキーとシークレットキーを取得します。
2. フロントエンドのフォーム作成
以下はreCAPTCHA v3を組み込んだ基本的なHTMLフォームの例です:
<form action="process.php" method="post">
<input type="text" name="name" placeholder="名前">
<input type="email" name="email" placeholder="メールアドレス">
<input type="hidden" id="g-recaptcha-response" name="g-recaptcha-response">
<input type="submit" value="送信">
</form>
<script src="https://www.google.com/recaptcha/api.js?render=YOUR_SITE_KEY"></script>
<script>
grecaptcha.ready(function() {
grecaptcha.execute('YOUR_SITE_KEY', {action: 'submit'}).then(function(token) {
document.getElementById('g-recaptcha-response').value = token;
});
});
</script>
3. サーバーサイドの検証
送信されたデータを検証するために、以下のコードを使用します:
<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$secretKey = "YOUR_SECRET_KEY";
$responseKey = $_POST["g-recaptcha-response"];
$userIP = $_SERVER["REMOTE_ADDR"];
$response = file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret=$secretKey&response=$responseKey&remoteip=$userIP");
$responseKeys = json_decode($response, true);
if ($responseKeys["success"] && $responseKeys["score"] >= 0.5) {
echo "フォームが正常に送信されました!";
} else {
echo "スパム検知!フォーム送信は無効です。";
}
}
?>
このコードはGoogleのAPIを使ってreCAPTCHAトークンを検証し、スパム送信を防ぎます。また、スコアを利用して信頼性を判断します。
4. 動作確認
フォームを送信し、期待通りに動作するかを確認してください。スコアが適切に計測され、スパムがブロックされれば成功です。
トラブルシューティング
- reCAPTCHAが表示されない場合: APIキーの設定ミスやJavaScriptのロードエラーを確認してください。
- スコアが低すぎる場合: フォームの設計やアクションを見直し、reCAPTCHAの動作を調整してください。
- フォーム送信が遅い: GoogleのAPIレスポンスに遅延が発生している可能性があります。
応用: 他のプラグインやツールとの連携
Contact Form 7以外のフォームプラグイン(例: WPFormsやNinja Forms)でも同様の手順でreCAPTCHA v3を導入できます。また、Invisible reCAPTCHAを利用することで、ユーザー体験を損なわずにスパム対策を強化することも可能です。
まとめ
reCAPTCHA v3は、ユーザー操作を最小限に抑えながらスパム対策を行うための優れたツールです。Contact Form 7とPHPのどちらでも簡単に導入できるため、フォームの種類や運用目的に応じて適切な方法を選び、セキュリティを向上させましょう。