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