
2019年8月26日
Google reCAPTCHA v2とは、Webサイトでフォーム送信の際などに見かける「私はロボットではありません」のこと
スパムなどの対策にロボットには難しい画像選択などをさせて人間とロボットを判別するためのものである
これを自分のサイトに設置する場合の手順を記す
Google reCAPTCHAのサイトから利用登録してサイトキーをシークレットキーを取得する
※ 予めGoogleアカウントは取得してあるものとする
reCAPTCHA v2
の「私はロボットではありません」チェックボックス
を選択するlocalhost
と入力する
次のようなHTMLコードで設置できる
<script src="https://www.google.com/recaptcha/api.js" async="" defer=""></script>
<form action="./verify.php" method="POST">
<div class="g-recaptcha" data-sitekey="サイトキー"></div>
<input type="submit" value="Submit">
</form>
{サイトキー}
の部分には事前に取得したサイトキーを設定するg-recaptcha
クラスのdivの位置に「私はロボットではありません」が表示されるg-recaptcha
クラスのdivはフォーム(form)の中に書く必要があるSubmit先で判別結果を確認する必要がある
判別結果を取得するためにはGoogleのAPIを利用する必要がある
フォームのデータの受信とHTTPリクエストができればプログラム言語は問わない
今回はPHPで実装してみる
verify.php
$secretKey = 'シークレットキー';
$captchaResponse = $_POST['g-recaptcha-response'];
// APIリクエスト
$verifyResponse = file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret={$secretKey}&response={$captchaResponse}");
// APIレスポンス確認
$responseData = json_decode($verifyResponse);
if ($responseData->success) {
echo 'success'; // 成功(ロボットではない)
} else {
echo 'fail'; // 失敗
}
{シークレットキー}
の部分には事前に取得したシークレットキーを設定するg-recaptcha-response
に判別結果を取得するためのトークンが入っているあとは判定結果に応じてエラーを表示したりすればよい