SOFTELメモ Developer's blog

会社概要 ブログ 調査依頼 採用情報 ...
技術者募集中

Googleの「reCAPTCHA v3」を実装する

問題

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

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

答え

準備

https://www.google.com/recaptcha/intro/v3.html

・右上「Admin console」

・ログインしていなかったらログイン

・「新しいサイトを登録する」

・reCAPTCHA v3 を選択

・サイトキー、シークレットキーが発行されるので控えておく

ブラウザ側実装

https://developers.google.com/recaptcha/docs/v3

<script src="https://www.google.com/recaptcha/api.js?render=reCAPTCHA_site_key"></script>
<script>
//jqueryのdocument.readyを使うと
$(function(){
  grecaptcha.ready(function() {
  grecaptcha.execute('reCAPTCHA_site_key', {action: 'homepage'}).then(function(token) {
// token を hidden にでも入れておく
$('#hoge').val(token);
  });
 });
});
</script>

<form method="post" action="test.php">
<button type="submit">送信</button>
<input type="hidden" id="hoge">
</form

サーバー側実装

ブラウザ側で実装した通りフォームからtokenが送られてくるので、それを
https://www.google.com/recaptcha/api/siteverify に渡して検証してもらう。

<?php
$url = 'https://www.google.com/recaptcha/api/siteverify';
$post_data = array(
        'secret' => 'シークレットキー',
        'response' => $_REQUEST['token'],
        'remoteip' => $_SERVER['REMOTE_ADDR'], // 任意
);
$options = array(
        'http' => array(
                'method' => 'POST',
                'header' => 'Content-type: application/x-www-form-urlencoded',
                'content' => http_build_query($post_data),
        )
);
$context = stream_context_create($options);
$r = json_decode(file_get_contents($url, false, $context));

var_dump($r->success);
var_dump($r->score);

if ($r->success == 1) {
    // 認証成功の処理
} else {
    // 認証失敗の処理
}

Googleからの検証のレスポンスで、successやscoreなどが取得できるので、あとはこちら側で判断する。

メモ(課金について)

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

Googleのヘルプによると無料サービスです。

What is reCAPTCHA?(reCAPTCHAとは?)

reCAPTCHA is a free service from Google that helps protect websites from spam and abuse.

(reAPTCHAはGoogleの無料サービスです。ウェブサイトをスパムや不正利用から守ります。)

https://support.google.com/recaptcha/?hl=en

関連するメモ

コメント