CAPTCHA(アンチスパム・イメージ)を使った認証

(2/2)

サンプル・プログラムの解説:CAPTCHAを認証する

CAPTCHA を発生するのは antispam_input.php である。
ヘッダなどを出力する「共通処理」、CAPTCHA に対応する文字列を入力する「入力処理」、CAPTCHA との比較処理と結果を出力する「認証処理」の 3 つの部分に分かれる。
space
まず入力処理だが、これは通常の HTML コンテンツである。
CAPTCHA を生成するために、antispam_input.php をそのまま呼び出している。
[送信]ボタンをクリックすると、自分自身 $myself を呼び出し、認証処理へ続く。
space
こうした動きを受け、米ペンシルバニア州立大学は。新しい CAPTCHA 技術「IMAGINATION」を開発した。
IMAGINATIONでは、まず組み合わされた複数の画像の中からどれか一つの画像の中心をクリックし、次に表示された画像の説明をリストから選ぶという二段階の認証方式をとっている。ユーザに表示される画像は、ランダム生成されたパラメータによって色が変えてあったり、関係ない質感や縁取りが表示されるようになっている。

0048: // 【2】入力処理 ==========================================================
0049: if (! isset($_POST["chars"])) {
0050: echo <<< EOF
0051: <form name="myForm" method="post" action="$myself">
0052: <img src="antispam_image.php" />
0053: <input type="text" name="chars" /> 
0054: <input type="submit" name="submit" value="送信" />
0055: </form>
0056: <hr />
0057: <b>【使い方】</b>
0058: 表示されている画像に対応する文字(半角数字・半角英小文字)を入力し、
0059: [送信] ボタンをクリックしてください。
0060: EOF;

認証処理では、まず、ユーザー関数 MyCheckCharacterMyCheckStrLength を利用して、入力文字の種類(半角数字・半角英数字;AntiSpam クラスが発生させることができる文字種)と、入力文字の長さ(変数 $col)の検査を行っている。
これは、クロスサイトスクリプティング(XSS)対策の意味もある。
space
検査をクリアしたら、CAPTCHA発生時にセットされた Cookie の内容と入力文字列を比較する。完全に一致すれば認証成功である。

0061: // 【3】認証処理 ==========================================================
0062: else {
0063:     if (! MyCheckCharacter($_POST['chars'], '/^[1-9a-np-z]+$/')) {
0064:         echo "入力できるのは半角数字・半角英小文字だけです";
0065:     } else if (! MyCheckStrLength($_POST['chars'], $col$col)) {
0066:         echo "CAPTCHAの長さは {$col} 文字です";
0067:     } else if ($_POST['chars'] == $_COOKIE['AntiSpamChars']) {
0068:         echo "合格です!";
0069:     } else {
0070:         echo "間違いです!!";
0071:     }
0072: echo <<< EOF
0073: <form name="myForm" method="post" action="$myself">
0074: <input type="submit" name="submit" value="戻る" />
0075: </form>
0076: EOF;

CAPTCHAが破られる?

2008 年 2 月、セキュリティ企業の Websense は、スパマーがボット・プログラムを使ってWindows Live Mail の CAPTCHA を破ったと伝えた。
このボットは、Live Mail の CAPTCHA画像を CAPTCHA破りサービスに送信して読み取らせ、解読したテキストを受け取る仕組みになっている。CAPTCHA破りに成功する確率は平均で 3 回に 1 回程度だが、このプロセスを何度も繰り返すことで、悪用目的のアカウントを大量登録しているという。
さらに 4 月には、Google の CAPTCHA も突破されたと報じている。
space
JpGraph によって生成された CAPTCHA も、いつか破られる(破られた)かもしれない。
こうしたプログラムは、ユーザーが少ない方が破られにくい(スパマーが興味を抱かないため)ので、参考サイトで紹介しているようなライブラリを使うといいだろう。
space
そんな中、「妹認証」が登場した。妹の絵に書かれた文言(日本語の画像)に返答することで認証できる。
デモ版のインターフェースはともかく(笑)、隠語を符丁にした CAPTCHA というコンセプトは使えそうだ。
space
また、Securimage PHP CAPTCHA では、PHP から利用できるさまざまな CAPTCHA 生成ライブラリを無償提供している。これらを使い分けることで、CAPTCHA を破られるリスクは低くなるだろう。

CAPTCHAを使って書籍をデジタル化

米カーネギーメロン大学のコンピュータサイエンス校が「reCAPTCHA」というプロジェクトを立ち上げた。
これは、文字のにじみなどがあり OCR では判読できない書籍の一節を CAPTCHA に利用。未判読の単語と既に判読されている単語を組み合わせて表示し、ユーザーに両方の単語を読み取ってもらうというもの。判読済みの単語が正しく入力されれば正解として扱い、別のユーザーにも判読してもらうことで精度を高める。こうして、人力で書籍をデジタル化していくのである。
space
このプログラムを約 1 年間にわたってネット上で公開したところ、4 万以上のウェブサイトで採用され、約 1 万 7600 冊の書籍に相当する 4 億 4 千万以上の単語が、ネット利用者によって解読された。正解率は、書籍のデジタル化サービスの業界標準に匹敵する 99.1%にのぼったという。

参考書籍

  • 入門PHP セキュリティ」(クリス・シフレット/桑村潤/オライリー・ジャパン/オーム社/2006 年 05 月/1,890 円)
  • PHP辞典第2版」(西沢直木/翔泳社/2008 年 02 月/2,520 円)
  • PHP の薬箱」(佐久嶋ひろみ/九天社/2006 年 11 月/2,940 円)

参考サイト

(この項おわり)
header