PHPでGoogle reCAPTCHAをフォームに導入する方法!初心者にもわかるスパム対策ガイド
生徒
「先生、最近フォームに変なメッセージが届くことが多いんですけど、どうしたらいいですか?」
先生
「それはスパムボットの仕業かもしれませんね。Googleが提供している『reCAPTCHA(リキャプチャ)』という仕組みを使えば、ロボットによる送信を防ぐことができますよ。」
生徒
「reCAPTCHAって聞いたことあるけど、どうやってPHPのフォームに入れるんですか?」
先生
「では、reCAPTCHAを使うための基本から、導入方法まで順番に解説していきましょう!」
1. Google reCAPTCHAとは?初心者向けにやさしく解説
Google reCAPTCHA(リキャプチャ)は、インターネットのフォームを守るためのセキュリティ機能です。スパムやボット(自動プログラム)による不正な投稿を防ぎ、人間だけがフォームを送信できるようにします。
例えば「信号機の画像を選んでください」といった質問を見たことがあるかもしれませんね。あれがreCAPTCHAの仕組みの一つです。
2. reCAPTCHAの種類と選び方
現在のreCAPTCHAには以下の2種類があります:
- v2(チェックボックス型):
「私はロボットではありません」というチェックボックスをクリックする形式。 - v3(スコア判定型):
ユーザーの動きを自動で判断し、裏側でスパムを検出します。画面に何も表示されないのが特徴です。
この記事では、初心者でも使いやすいv2(チェックボックス型)を使います。
3. Google reCAPTCHAの登録方法(無料)
まずはGoogleの公式サイトにアクセスして、reCAPTCHAを使う準備をします。
- reCAPTCHA 管理ページにアクセスします。
- Googleアカウントでログインします。
- 「Label」にサイト名を入力(自分だけが分かる名前でOK)。
- 「reCAPTCHAタイプ」は「reCAPTCHA v2」を選び、「私はロボットではありません」にチェック。
- 「ドメイン」にサイトのURLを入力(例:example.com)。
- 「利用条件に同意」にチェックし、「送信」をクリック。
登録が完了すると「サイトキー」と「シークレットキー」が発行されます。これを後ほどPHPコードに使います。
4. HTMLフォームにreCAPTCHAを埋め込む
次に、フォームの中にreCAPTCHAを表示するコードを追加します。
<form action="check.php" method="post">
<input type="text" name="name" placeholder="お名前">
<input type="email" name="email" placeholder="メールアドレス">
<!-- reCAPTCHAの表示 -->
<div class="g-recaptcha" data-sitekey="あなたのサイトキー"></div>
<input type="submit" value="送信">
</form>
<!-- reCAPTCHAのスクリプト読み込み -->
<script src="https://www.google.com/recaptcha/api.js" async defer></script>
※data-sitekeyの部分には、先ほど取得した「サイトキー」を入れてください。
5. PHPでreCAPTCHAのチェックを行う
次に、フォームから送信された情報をPHPで受け取り、reCAPTCHAの認証を行います。下記はcheck.phpのサンプルです。
<?php
$secret = "あなたのシークレットキー";
$response = $_POST["g-recaptcha-response"];
$remoteip = $_SERVER["REMOTE_ADDR"];
$verify = file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret=$secret&response=$response&remoteip=$remoteip");
$captcha_success = json_decode($verify);
if ($captcha_success->success) {
echo "認証に成功しました。送信を受け付けました。";
} else {
echo "reCAPTCHAの認証に失敗しました。もう一度やり直してください。";
}
?>
シークレットキーの部分も、Googleで取得したものを入れてください。
6. よくあるエラーと原因・対処法
フォームを送信しても「認証に失敗しました」と表示される場合:
- サイトキーやシークレットキーが間違っている可能性があります。コピー&ペーストミスがないか確認してください。
- reCAPTCHAのドメイン設定に自分のURLが入っていない可能性もあります。
- インターネットが切れていたり、JavaScriptが無効になっている場合も失敗します。
7. スパム対策としてのreCAPTCHA導入の効果
reCAPTCHAを導入することで、自動投稿プログラム(ボット)による迷惑なフォーム送信を大幅に減らすことができます。特に、メールフォームやお問い合わせページなどでは必須ともいえる対策です。
また、reCAPTCHAを入れていると、Google検索の評価にも良い影響を与えることがあるとも言われています。
8. 応用:複数フォームや非公開ページにも使える
reCAPTCHAは1つのサイト内で複数のフォームに使うことができます。たとえば「お問い合わせフォーム」「会員登録フォーム」「コメント投稿フォーム」など、どこにでも貼り付けるだけで簡単にスパム対策が可能です。
ログインページやパスワードリセット画面にも導入しておくと、不正ログイン対策にもつながります。