reCAPTCHAを使ったフォームのスパム対策|Contact Form 7とPHPでの実装例


スパム対策は、フォームを運営する際に欠かせない要素です。特に、スパムボットによる自動送信を防ぐためにGoogleの提供する「reCAPTCHA」を活用するのは有効な手段の一つです。本記事では、WordPressプラグイン「Contact Form 7」と手動でPHPを使う2つの方法でreCAPTCHAを実装する手順を解説します。


reCAPTCHAとは?

reCAPTCHAはGoogleが提供するスパム対策ツールで、フォームの送信時に人間とボットを識別する機能を持っています。種類として以下があります:

  • reCAPTCHA v2: チェックボックスをクリックするタイプ。
  • reCAPTCHA v3: ユーザー操作を不要にしてスコアで判定。
  • Invisible reCAPTCHA: 非表示で動作するタイプ。

reCAPTCHA v2とv3の違い

特徴reCAPTCHA v2reCAPTCHA v3
操作性チェックボックスのクリックが必要完全自動でユーザー操作が不要
判定方法ユーザーのアクションに基づくスコア(0.0〜1.0)で信頼度を数値化
適用例小規模なフォームやシンプルな使用場面大規模なシステムやユーザー体験を損なわない用途

本記事では、最新技術でユーザー体験を向上させるreCAPTCHA v3を例に解説します。


Contact Form 7でのreCAPTCHA v3実装

1. Google reCAPTCHAの登録

  1. Google reCAPTCHAの公式サイトにアクセスし、Googleアカウントでログインします。
  2. 「サイトを登録」ボタンをクリックし、以下の情報を入力します:
    • ラベル: サイトを識別するための名前。
    • reCAPTCHAの種類: v3を選択します。
    • ドメイン: 使用するドメインを入力します。
  3. 「登録」ボタンをクリックすると、サイトキーシークレットキーが生成されます。

2. WordPressでの設定

  1. WordPress管理画面にログインし、左メニューから「お問い合わせ」>「インテグレーション」を選択します。
  2. reCAPTCHAの項目で「インテグレーションのセットアップ」をクリックし、Googleで取得したサイトキーとシークレットキーを入力します。
  3. 設定を保存します。

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のどちらでも簡単に導入できるため、フォームの種類や運用目的に応じて適切な方法を選び、セキュリティを向上させましょう。


関連記事: PHPで安全なコンタクトフォームを作成|CSRF・XSS対策と基本コード解説

✪ 画像素材がないものはランダムで表示されるようになっています。フリー素材などでご用意ください。

おすすめChromeプラグイン一覧

プラグイン名特徴
GoFullPageウェブページ全体のスクリーンショットを簡単に取得できるブラウザ拡張機能です。
ColorZilla色を抽出するための拡張機能です。
WhatFontウェブページ上のフォントの情報を簡単に確認できるブラウザ拡張機能です。
PerfectPixelデザイナーが作成したデザインと実際にコーディングされたウェブページがどの程度一致しているかを確認・調整するためのブラウザ拡張機能です。

模写の手順

ステップ内容
ステップ 1構図を手書きか全画面スクショ(Go full page等)した後、ペイントツールで四角で囲い、大まかなclass,命名規則をあらかじめ決める。
ステップ 2HTMLの基本構造を作成する
ステップ 3CSSでレイアウトを模写する
ステップ 4 中級〜JavaScriptを追加して動きを再現する
ステップ 5最終調整を行い、検証ツールやPerfectPixel(chromeプラグイン)などで完成を確認する。