|
|
Web のユーザー登録画面などで、左のような画像に含まれている文字を入力させる場面がある。スパムによる自動入力を防止するための措置で、このような画像を「CAPTCHA*」(アンチスパム・イメージ)と呼んでいる。 |
|
今回は、PHP を使って CAPTCHA を発生させ、入力された文字が CAPTCHA 合致するかどうか、予想される攻撃にも配慮しつつ、プログラムを作ってみることにする。 CAPTCHA は、JpGraph がライブラリとしてサポートしているので、これを利用することにする。JpGraph の詳細については、以前の記事を参照のこと。 |
サンプル・プログラム |
|
| サンプル・プログラムは2つのソース・ファイルに分かれており、antispam_input.php の方を実行する。 | |
サンプル・プログラムの解説:CAPTCHAを発生する |
|
|
CAPTCHA を発生するのは antispam_image.php である。 このプログラムは、JpGraph の機能に依存している。まず、JpGraph のライブラリを読み込む。
0010: //JpGraph |
|
|
次に、AntiSpam クラスの新しいインスタンスを作成する。 発生させる CAPTCHA をランダムに発生させるメソッド Rand は AntiSpam クラスに用意されている。引き数は発生する CAPTCHA の桁数である。また、表示できるイメージは半角数字・半角英小文字のみである。ただし、アルファベットの 'O' (オー)と数字の '0' (ゼロ) はよく似ており間違えやすいので、使われない。
0013: $col = 6; //発生するアンチスパム画像の桁数 |
|
CAPTCHA を発生するのは Stroke メソッドである。 これが失敗した場合にはエラー・メッセージを表示するようにしてある。 実際に表示する CAPTCHA を文字列データとして、関数 setcookie を使って Cookie に入れておく。Cookie の寿命は 30秒間とした。 これにより、認証に使う文字列データはクライアントに渡されたことになる。以後、サーバ側では関知できず、サーバ攻撃を受けたとしても認証文字列データが漏れることはない。 なお、antispam_image.php は単独でも動作する。
0018: setcookie("AntiSpamChars", $chars, time() + 30); //30秒間有効なCookie |
(
この項つづく)
|
|
|
|
|
2008年04月29日更新
写真と記事 (C)2008 studio pahoo
(※)本ページはリンクフリーですが、複製・転載時にはご一報ください。 |