勉強したことのメモ

Webエンジニア / プログラマが勉強したことのメモ。

formにGoogle reCAPTCHA v3を組み込み、PHPでスコア判定する方法

  PHP Google

だいぶ前にGoogle reCAPTCHA v2をformに組み込むという記事を書いたが今回はv3を組み込みたい。また、v3の場合は画像認証ではなくスコア(しきい値)判定になるので、その判定部分をPHPで制御したい。以下に実装方法をメモ。

 

Google reCAPTCHA

公式サイト

https://developers.google.com/recaptcha?hl=ja

ダッシュボード

https://www.google.com/recaptcha/admin/

 

サイト登録

ダッシュボードからGoogleアカウントでログインしreCAPTCHAを導入したいサイトを登録する。

サイトキー及びシークレットキーが発行されるのでメモっておく。

 

実装方法

form側(index.php)

<form action="./check.php" method="post">
    <input type="hidden" name="recaptcha_response" id="recaptchaResponse">
    <input type="submit" value="submit">
</form>

<script src="https://www.google.com/recaptcha/api.js?render=【サイトキー】"></script>
<script>
grecaptcha.ready(function() {
    grecaptcha.execute('【サイトキー】', {action: 'submit'}).then(function(token) {
        var recaptchaResponse = document.getElementById('recaptchaResponse');
        recaptchaResponse.value = token;
    });
});
</script>

サイトキー部分は適宜変更すること。

スコア判定側(check.php)

<?php
$recaptcha_response = $_POST['recaptcha_response'];
$recaptcha_secret = '【シークレットキー】';

//スコアを小数値で設定
$score = 0.5;

$recaptch_url = 'https://www.google.com/recaptcha/api/siteverify';
$recaptcha_params = [
    'secret' => $recaptcha_secret,
    'response' => $recaptcha_response,
];
$recaptcha = json_decode(file_get_contents($recaptch_url . '?' . http_build_query($recaptcha_params)));

if( $recaptcha->score >= $score ){
    echo '認証成功';
}else{
    echo '認証失敗';
}

シークレットキー及びスコア($score)部分は適宜変更すること。

 

その他

reCAPTCHAとの接続エラーチェック

シークレットキーが間違っている等でreCAPTCHAとの接続エラーがあった場合は$recaptchaに以下内容が入る。

object(stdClass)#1 (2) {
  ["success"]=>
  bool(false)
  ["error-codes"]=>
  array(1) {
    [0]=>
    string(20) "missing-input-secret"
  }
}

そのため「$recaptcha->success」で接続の成否をチェックできる。また、エラー時は「$recaptcha->error-codes」をループで回すとエラーコードが確認できる。

v2を組み込みたい場合

v3ではなくv2を組み込みたい場合は以下過去記事を参照。

https://taitan916.info/blog/archives/3162

 - PHP Google

  関連記事

formにhCaptchaを組み込み、PHPで結果を検証する方法
formにhCaptchaを組み込み、PHPで結果を検証する方法

お問い合わせフォーム等でGoogle reCAPTCHAではなくhCaptcha ...

PHPでシンプルな英数字のCAPTCHAを「Gregwar / Captcha」ライブラリで実装する方法
PHPでシンプルな英数字のCAPTCHAを「Gregwar / Captcha」ライブラリで実装する方法

PHPでシンプルなランダム英数字のCAPTCHAを実装したい。「Gregwar ...

CAPTCHAに代わる無料のツール「Cloudflare Turnstile」の導入方法
CAPTCHAに代わる無料のツール「Cloudflare Turnstile」の導入方法

CAPTCHAと言えばGoogleのreCAPTCHAを思い浮かべるが、稀にCl ...

迷惑メール対策でフォームにGoogle reCAPTCHA v2を導入する方法
迷惑メール対策でフォームにGoogle reCAPTCHA v2を導入する方法

お問い合わせフォームのスパムメール対策としてreCAPTCHAを導入したいという ...

PHPでログインフォームにひらがな認証を設置する方法
PHPでログインフォームにひらがな認証を設置する方法

ログインフォームに平仮名認証を設置したい。英数字認証だとSecurimageとい ...