勉強したことのメモ

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

  関連記事

reCAPTCHA v2でAjaxは使わずにチェック状況を確認する方法

reCAPTCHA v2を実装する案件があり以前の記事を参考に組み込んでみたもの ...

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

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

CodeIgniter4 & reCAPTCHA でお問い合わせフォームを作成する方法

以前CodeIgniter4.4.4で簡易的なお問い合わせページを作成したが、今 ...