BOT判別はいくつかあるけど、Googleのものがお手軽なので備忘録として導入手順を書いておきます。
Googleのアカウントがあれば1時間もかかりません。
まずここでSite KeyとSecret Keyを取得します。
reCAPTCHA: Easy on Humans, Hard on Bots
無事に取得出来るとこんな感じに発行されます。
うまく取得できたら下記の感じでjQueryと組み合わせます。
<script src='https://www.google.com/recaptcha/api.js'></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="g-recaptcha" data-callback="clearcall" data-sitekey="[Site keyを指定]"></div>
<button type="button" class="reCapcha" disabled>reCapchaが成功したらEnableになるボタン</button>
<script type="text/javascript">
function clearcall(code) {
if(code !== ""){
$('.reCapcha').prop("disabled", false);
}
}
</script>
クライアント側はこれでOKです。
次にサーバー側を作ります。
ぱっと見てクライアント側だけでもいけそうな気もしますが、そもそもdisabledを解除されたら意味がないのでサーバー側も必要です。
でも、サーバー側も簡単です。
PHPで書くとこんな感じになります。
$recaptcha = htmlspecialchars($_POST["g-recaptcha-response"],ENT_QUOTES,'UTF-8');
if(isset($recaptcha)){
$captcha = $recaptcha;
}else{
$captcha = "";
echo "reCaptcha Error";
exit;
}
$secretKey = "[Site keyを指定]";
$resp = file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret={$secretKey}&response={$captcha}");
$resp_result = json_decode($resp,true);
if(intval($resp_result["success"]) !== 1) {
/* 認証失敗時処理 */
}else{
/* 認証成功時処理 */
}
クライアント側でちゃんと処理できればGoogle側からg-recaptcha-responseでレスポンスが返ってきます。
そのレスポンスをもってSite Key とSecret Keyをhttps://www.google.com/recaptcha/api/siteverifyに送ってやることで判断が行われます。
個人でちまちまBOTを叩いていくのは割と面白いし色々な手口がみれて発見もあるのですが、商用だとそうも言っていられないのでGoogleの賢いBOTを判定を効果的に導入していければと思います。
関連記事