(39) reCAPTCHAで認証を実装

(1) やりたいこと

投稿フォームを botから守りたい。

(2) 実現方法

HTTP refererのチェックや、onetime tokenなどはよく使っているが、今回は Googleが提供している reCAPTCHAを使ってみる。

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

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

1. APIキーを取得

手順1: 上記二つ目のサイトにアクセスし [Get reCAPTCHA] ボタンを押す。

手順2: 認証を使用するドメインの情報を入力する。

手順3: 発行された Site-key と Secret-key を控えておく。

2. 投稿フォームを作成

投稿フォームを表示するだけのページを作る。

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<script src="//ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script src='https://www.google.com/recaptcha/api.js'></script>
</head>
<body>

<form id="myForm" method="post" action="index.php">
<div class="g-recaptcha" data-callback="enbButton" data-sitekey="xxxxxxxxx"></div>
<input type="submit" name="myButton" value="送信" disabled>
</form>

<script>
function enbButton(code){
  if(code !== ""){
    $('#myForm input:submit').removeAttr('disabled');
  }
}
</script>

</body>
</html>

3. 認証処理を作成

PHPで書く。

if(isset($_POST['myButton'])){
  $gresp = $_POST['g-recaptcha-response'];
  if(isset($gresp)){
    $secret_key = 'yyyyyyyyyyyyyyyyyyyyyy';
    $resp = file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret={$secret_key}&response={$gresp}");
    $rslt = json_decode($resp, true);
    if($rslt['success'] == TRUE){
      // 認証成功!
    }
  }
}

出来上がったサンプルページはこちら。
https://hp.dogrow.net/sample/00039/


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です