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
コメント