PHPフォームで画像認証 - Securimage の使い方

2013/10/30

フォームで画像認証

概要

画像認証とは、フォームに表示した画像に書かれた英数字を正しくテキストボックスに入力しないと、フォームを送信できなくさせる認証方法です。
このような画像です。
CAPTCHA

この文字列はとても見にくく間違えることもあり面倒ですよね。
なぜこのような面倒くさい認証方法を行うのでしょうか。

スパムメール対策

フォームを設置していると、たくさんのスパムメールが送られることがあります。
スパムメールとは、大量に無差別に送られるメールで、広告などもあればウイルスに感染させるためのものもあります。

こういったスパム対策の一つとして、フォームで画像認証を行っています。
多くのスパムメールは、プログラムによりhtmlのタグや文字列を解析して自動で送信されています。
しかし、画像上の文字列はプログラミングで読み取ることが難しいのです。
そのため、画像認証を利用することでこれらの被害を大幅に減らすことができます。
そして、より読み取りにくくするために、人間の目でも見にくい文字列が記載された画像となっているのです。

Securimage の使用方法

ダウンロード

Securimageを開き、ヘッダーメニュの「Download」から当ライブラリを入手できます。
サイトを見れば分かりますが、ドキュメント(Docs)やデモ(Demo)なども用意されているので参考にしてください。
Securimage

設定方法

まずは以下のフォームをHTML記述します。


<form action="" method="POST">
	<img id="captcha" src="./securimage/securimage_show.php" alt="captcha" />
	<input type="text" name="captcha_code" size="10" maxlength="10" />
	<a href="#" onclick="document.getElementById('captcha').src = './securimage/securimage_show.php?' + Math.random(); return false">[ Different Image ]</a>
	<br />
	<input type="submit" value="submit" />
</form>

imgタグでは、securimage_show.phpを読込んでいます。
このsecurimage_show.phpは、次のようなコードとなります。


require_once dirname(__FILE__) . '/securimage.php';
$img = new Securimage();
$img->show();

これで表示側は完成です。
フォームをサブミットした後のPHPの処理はこのように行います。


if (isset($_POST['captcha_code']) && $_POST['captcha_code'] == $_SESSION["securimage_code_disp"]["default"]) {
	echo "OK";
}

テキストボックスで入力された文字列と、画像上の文字列が一致したら「OK」と表示されます。

ここまでで一番簡単な方法を紹介しましたが、この他にも設定できる項目はたくさんあります。
フォントサイズや揺らぎ度、画像サイズ、背景色、文字色、透明度などなど、簡単にいろいろな設定が行えるので試してみてください。

Related

Vagrant+Docker+PHP環境で「session.save_path」指定時に、セッションファイルが空になるエラー

ファイル共有でのフォルダの所有者を設定 結論 PHP5.4.28 からセッションファイルのownerはrootもしくはWebサーバのユーザに限るという制限が...

LINEと連携したテイクアウト事前注文システム徹底比較!

目次 テイクアウト予約・注文受付システムのトレンド LINEと連携したテイクアウト事前注文システムの価格表 L.B.B.Cloud テイクイーツ ...

PHPで動画の撮影日を取得

PHPで動画の撮影日を取得 概要 PHPからffprobeコマンドを実行し、動画の撮影日時を取得します。 コード $posted_at = ...

FullCalendarでGoogleカレンダーのようなUIを実装

jQueryプラグインFullCalendarのサンプル 概要 FullCalendarを使用して、GoogleカレンダーのようなUIを実装する使用例を...

PHP Laravel5.2でmulti-auth(複数テーブルでの認証)を実装

Laravel5.2でマルチ認証 概要 LaravelとはPHPの中で今最も伸びているフレームワークです。 処理速度が遅いなどありますが、かなり使い安く拡...

PHP 正規表現でIPアドレス形式の文字列か判定

正規表現でIPアドレスの入力チェック 概要 フォームで入力されたIPアドレスが正当な文字列か判定するためのバリデーション処理を実装します。 基本的...
トップへ戻る