SOFTELメモ

Softel Inc.

Googleの「reCAPTCHA v2」を実装する

問題

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

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

答え

準備

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

・右上「Admin console」

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

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

・reCAPTCHA v2 を選択

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

ブラウザ側実装

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

<html>
<head>
<title>reCAPTCHA demo: Simple page</title>
<script src="https://www.google.com/recaptcha/api.js" async defer></script>
</head>
<body>
<form action="?" method="POST">
<div class="g-recaptcha" data-sitekey="your_site_key"></div>
<br/>
<input type="submit" value="Submit">
</form>
</body>
</html>
</script>

サーバー側へのトークンの受け渡しは勝手にやってくれる。

$_REQUEST[‘g-recaptcha-response’] で送られてくる。

サーバー側実装

ブラウザ側からtokenが ‘g-recaptcha-response’ のキーで送られてくるので、それを
https://www.google.com/recaptcha/api/siteverify に渡して検証してもらう。

<?php
$url = 'https://www.google.com/recaptcha/api/siteverify';
$post_data = array(
'secret' => 'シークレットキー',
'response' => $_REQUEST['g-recaptcha-response'],
'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);

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

メモ(課金について)

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

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

関連するメモ

コメント