カテゴリ: PHP 更新日: 2025/12/16

PHPでスパム対策!CAPTCHAの使い方を初心者向けにやさしく解説

PHP の CAPTCHA を使ったスパム対策
PHP の CAPTCHA を使ったスパム対策

先生と生徒の会話形式で理解しよう

生徒

「お問い合わせフォームにスパムがたくさん届いて困っています。PHPで防ぐ方法ってありますか?」

先生

「それは大変だね。PHPではCAPTCHA(キャプチャ)という仕組みを使うことで、スパムを防止できるよ。」

生徒

「キャプチャって、画像に文字が書かれていて、それを入力するやつですか?」

先生

「そうそう。それを導入することで、自動的に送られるスパムメッセージをブロックできるんだ。一緒に設定方法を見ていこう!」

-

1. CAPTCHAとは?スパム対策のしくみを理解しよう

1. CAPTCHAとは?スパム対策のしくみを理解しよう
1. CAPTCHAとは?スパム対策のしくみを理解しよう

CAPTCHA(キャプチャ)とは、「これは人間ですか?それともロボットですか?」を確認するための仕組みです。主にインターネットのフォーム(お問い合わせやコメント投稿)に使われます。

コンピューターのロボット(スパムボット)は、大量の迷惑メッセージを自動で送ってきます。それを防ぐために、人間しか解読できない画像や質問を出して確認します。

PHPでは、CAPTCHAライブラリや、GoogleのreCAPTCHAを使うことで、簡単にスパム対策ができます。

2. 画像キャプチャの例を見てみよう(簡易版)

2. 画像キャプチャの例を見てみよう(簡易版)
2. 画像キャプチャの例を見てみよう(簡易版)

まずは、PHPで作る簡単な画像キャプチャの仕組みを紹介します。画像にランダムな数字を表示し、ユーザーにその数字を入力してもらいます。


<form action="check.php" method="post">
    <img src="captcha.php" alt="キャプチャ画像">
    <input type="text" name="captcha_input" placeholder="画像の文字を入力">
    <input type="submit" value="送信">
</form>

このコードでは、captcha.phpという画像を生成するファイルが必要です。PHPで画像を作るにはGDという機能を使います。

3. captcha.phpの作り方:画像に数字を表示する

3. captcha.phpの作り方:画像に数字を表示する
3. captcha.phpの作り方:画像に数字を表示する

session_start();

$code = rand(1000, 9999);
$_SESSION['captcha'] = $code;

header('Content-Type: image/png');
$image = imagecreate(100, 40);
$bg = imagecolorallocate($image, 255, 255, 255);
$txt = imagecolorallocate($image, 0, 0, 0);
imagestring($image, 5, 25, 10, $code, $txt);
imagepng($image);
imagedestroy($image);

このコードは、ランダムな数字を画像にして表示する仕組みです。入力された数字が正しいかどうかは、PHPの$_SESSIONというしくみで一時的に保存しておきます。

4. check.phpでユーザーの入力を確認する

4. check.phpでユーザーの入力を確認する
4. check.phpでユーザーの入力を確認する

session_start();

if ($_POST['captcha_input'] == $_SESSION['captcha']) {
    echo "認証成功!メッセージを送信しました。";
} else {
    echo "キャプチャが正しくありません。もう一度お試しください。";
}

このようにして、画像の中の数字と、ユーザーの入力が一致していれば処理を進め、不一致ならスパムの可能性があるのでブロックします。

-

5. Google reCAPTCHAを使う方法(簡単・安心)

5. Google reCAPTCHAを使う方法(簡単・安心)
5. Google reCAPTCHAを使う方法(簡単・安心)

もっと強力なスパム対策として、Googleが提供している「reCAPTCHA(リキャプチャ)」を使う方法もあります。これは、画像だけでなく、チェックボックスやAIによる分析で判断する高性能なキャプチャです。

Googleアカウントを持っていれば、reCAPTCHA公式サイトから無料で利用登録できます。

以下のようなコードを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="送信">
</form>

そして、PHPのサーバー側では、Googleに確認するコードを書きます。

6. reCAPTCHAのサーバー側の確認処理

6. reCAPTCHAのサーバー側の確認処理
6. reCAPTCHAのサーバー側の確認処理

$secret = "あなたのシークレットキー";
$response = $_POST['g-recaptcha-response'];

$verify = file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret=$secret&response=$response");
$captcha_success = json_decode($verify);

if ($captcha_success->success) {
    echo "人間によるアクセスです。送信を受け付けました。";
} else {
    echo "スパムの可能性があります。送信をブロックしました。";
}

このようにGoogleのreCAPTCHAを使えば、画像を生成したりする必要がなく、より高いセキュリティを簡単に実現できます。

7. CAPTCHA導入のポイントと注意点

7. CAPTCHA導入のポイントと注意点
7. CAPTCHA導入のポイントと注意点

CAPTCHAはとても便利なスパム対策ですが、使い方を間違えるとユーザーにとって使いにくくなることもあります。

  • 画像が見づらいと、入力が難しくなってしまう
  • スマホユーザーでも使いやすいように設計する
  • 日本語がわからないスパムボットを防ぐために、日本語質問形式も有効

PHPでスパムメールや自動送信を防ぐには、CAPTCHAの導入がとても効果的です。フォームを安全に運用するために、ぜひ取り入れてみましょう。

まとめ

まとめ
まとめ

今回は、PHPで実装できるスパム対策「CAPTCHA(キャプチャ)」について、初心者の方にもわかりやすく解説しました。CAPTCHAは、スパムボットによる自動投稿を防ぐための仕組みであり、インターネット上のフォームを守るためにとても重要な存在です。PHPでは、画像キャプチャを自作する方法と、GoogleのreCAPTCHAを利用する方法があります。

自作の画像キャプチャは、GDライブラリを活用して数字を画像に表示し、$_SESSIONを使って一時的にコードを保存・検証するシンプルな仕組みでした。これは学習目的にも適しており、PHPの基本的な機能を理解する上でも非常に有効です。

一方、Google reCAPTCHAは、チェックボックスや画像選択、または完全に非表示のインビジブル方式など、より進化した形での認証が可能です。reCAPTCHAは、セキュリティレベルが非常に高く、フォームの利便性も維持しやすいため、実務での導入におすすめできます。

また、フォームの利便性を損なわないように注意する点も学びました。画像が読みにくい、入力欄が使いづらいといった設計では、かえってユーザーが離れてしまう可能性もあるため、デザインとユーザビリティを両立させる工夫が求められます。

それでは、改めてPHPでスパム対策のためのCAPTCHAを導入する例として、以下のような基本的な流れを整理しておきましょう。

CAPTCHAの処理の流れ(画像版)


1. captcha.phpで画像にランダムな数字を描画し、セッションに保存
2. HTMLフォームでその画像を表示し、ユーザーに入力を求める
3. check.phpでユーザーの入力値とセッションの値を照合し、一致すればフォームを通す

Google reCAPTCHAの導入手順(v2チェックボックス形式)


1. GoogleでreCAPTCHAキーを取得(サイトキーとシークレットキー)
2. フォームにチェックボックスを追加(JavaScriptとHTML)
3. verify.phpなどのPHPファイルでGoogleの認証APIに問い合わせて結果を判定

CAPTCHAの導入は、ただスパムを防ぐだけでなく、ユーザーとの健全なやり取りを守るためにも大切な技術です。PHPでフォームを構築する場面があるなら、ぜひ一度導入を検討してみてください。

先生と生徒の振り返り会話

生徒

先生、PHPでスパム対策する方法ってこんなにあるんですね!画像キャプチャとreCAPTCHA、両方試してみたいです!

先生

その意気だね!まずは自作の画像キャプチャで仕組みを理解してから、Google reCAPTCHAで本格的な運用をしてみるといいよ。

生徒

セッションの使い方も、画像の作成方法も実際に見てよく分かりました!セキュリティって難しそうだけど、やってみると面白いですね。

先生

そうそう、セキュリティは地味だけど大事な部分。しっかり学べば、安心して使えるフォームが作れるから頑張ってね。

生徒

はい!今度、自分のポートフォリオサイトにもCAPTCHAをつけてみます!

この記事を読んだ人からの質問

この記事を読んだ人からの質問
この記事を読んだ人からの質問

プログラミング初心者からのよくある疑問/質問を解決します

PHPでスパム対策するにはどんな方法がありますか?

PHPでは、CAPTCHAやreCAPTCHAをフォームに組み込むことで、スパムボットからの自動送信を効果的に防止できます。
コメント
コメント投稿は、ログインしてください

まだ口コミはありません。

カテゴリの一覧へ
新着記事
New1
PHP
PHP のフォームデータの受け取り($_POST, $_GET)を完全解説!初心者向けガイド
New2
PHP
PHPのスコープとは?グローバル・ローカル・スーパーグローバルを完全解説!
New3
PHP
PHPの演算子をやさしく解説!算術・比較・論理・ビット演算子の使い方
New4
PHP
PHP の変数とは?基本的な使い方とデータ型を徹底解説!
-
人気記事
No.1
Java&Spring記事人気No1
Python
Pythonで辞書のキー・値・アイテムを取得する方法(keys(), values())
No.2
Java&Spring記事人気No2
Python
Pythonで辞書のネスト構造(入れ子辞書)を扱う方法 初心者向け完全ガイド
No.3
Java&Spring記事人気No3
Python
Pythonでエラースタックトレースを表示・取得する方法を徹底解説!初心者向け例外処理入門
No.4
Java&Spring記事人気No4
Python
PythonでMySQLに接続する方法を完全解説!初心者でもわかるpymysqlの基本
No.5
Java&Spring記事人気No5
Python
PythonでExcelファイル(.xlsx)を操作する方法を徹底解説!初心者でもできるopenpyxl・pandasの使い方
No.6
Java&Spring記事人気No6
PHP
PHP の日付と時間の取得(date, time, strtotime)を完全解説!初心者でもわかる使い方
No.7
Java&Spring記事人気No7
PHP
PHPで画像ファイルをアップロードする方法を初心者向けに徹底解説!わかりやすい画像処理入門
No.8
Java&Spring記事人気No8
PHP
PHP のデータ型を完全ガイド!初心者でもわかる int, string, float, bool など
-
-