formにGoogle reCAPTCHA v3を組み込み、PHPでスコア判定する方法
だいぶ前に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を組み込みたい場合は以下過去記事を参照。
関連記事
-
CodeIgniter4 & reCAPTCHA でお問い合わせフォームを作成する方法
以前CodeIgniter4.4.4で簡易的なお問い合わせページを作成したが、今 ...
-
reCAPTCHA v2でAjaxは使わずにチェック状況を確認する方法
reCAPTCHA v2を実装する案件があり以前の記事を参考に組み込んでみたもの ...
-
迷惑メール対策でフォームにGoogle reCAPTCHA v2を導入する方法
お問い合わせフォームのスパムメール対策としてreCAPTCHAを導入したいという ...