SOFTELメモ Developer's blog

reCAPTCHA v3 を実装する 2025年版

2025/08/27 webservice

問題

GoogleのreCAPTCHA v3 を使いたいです。

スパムコメント、いたずらログイン対策に。

答え

準備

ホームページ https://developers.google.com/recaptcha または、

案内ページ https://cloud.google.com/security/products/recaptcha の「使ってみる」から、

新しいサイトを登録する https://www.google.com/recaptcha/admin/create へ進み(ログインが必要)

ドメインを登録して、そのWebサイトで使えるようにするのと、サイトキーとシークレットキーを取得する。

登録後は、この管理画面にて、サイトキー、シークレットを再確認できる。

ブラウザ側実装

ガイドの https://developers.google.com/recaptcha/docs/v3

「チャレンジを自動的にボタンにバインドする」の通りにするのが簡単。

1. JavaScript API を読み込みます。

<script src="https://www.google.com/recaptcha/api.js"></script>

2.トークンを処理するコールバック関数を追加します。

<script>
  function onSubmit(token) {
    document.getElementById("フォームのIDを書き込む").submit();
  }
</script>

3. html ボタンに属性を追加します。

<button class="g-recaptcha" 
        data-sitekey="ここにサイトキーを書き込む" 
        data-callback='onSubmit' 
        data-action='submit'>Submit</button>

サーバー側実装

ガイドの通りにすると $_POST['g-recaptcha-response'] でトークンが送られてくる。

これをGoogleに問い合わせて検証して、結果を得る。

スコア score が得られるので、低い場合は拒否する。以下の例では0.5より大きいとき許可。

<?php
        $recaptcha_ok = false;
        if (isset($_POST['g-recaptcha-response']))  {
            $ch = curl_init();
            curl_setopt($ch, CURLOPT_URL, 'https://www.google.com/recaptcha/api/siteverify');
            curl_setopt($ch, CURLOPT_POST, true);
            curl_setopt($ch, CURLOPT_POSTFIELDS, array(
                'secret' => 'ここにシークレットキーを書き込む',
                'response' => $_POST['g-recaptcha-response'],
            ));
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
            $recaptcha_response = curl_exec($ch);
            $recaptcha_result = json_decode($recaptcha_response);
            curl_close();
            if ($recaptcha_result->success && $recaptcha_result->score > 0.5) {
                $recaptcha_ok = true;
            }
        }
        if ($recaptcha_ok) {
            // 認証成功の処理
            // フォームのメール送信など
        } else {
            // 認証失敗の処理
            // エラー画面を返すなど
        }

メモ(課金について)

料金が発生するのか気になる方もいると思います。

Webサイトの記載によると無料サービスです。

reCAPTCHA は、スパムや不正行為からサイトを保護する無料のサービスです。高度なリスク分析手法を使用して、人間と bot を区別します。

ただし、月10,000件まで。

メモ

コールバック関数は自由にカスタマイズできるので、「g-recaptcha-response」というパラメータ名にせず、他のhiddenのフィールドでトークンを送信するなどしてもよい。

フォームのsubmitではなく、ajaxな処理で作られている場合などには、grecaptcha.executeでトークンの取得などをする。

関連するメモ

コメント