SATOXのシテオク日記

~ふもっふ、ふもふも~

画像文字認証reCAPTCHAをPHPで使ってみる

bot対策として誰でも一度は遭遇したことがあるのではないでしょうか。画像を見て文字入力を促されるウェブサイト上の機能。
画像文字認証はアカウント作成時などに悪意のあるプログラムによるものではなく、人間が入力していることを判断させる事が目的です。
SATOXはよく知らなかったのですが、reCAPTCHAというサービスは2009年にGoogleが買収して、Googleのサービスだったのですね。ちなみに、reCAPTCHAで表示される画像はソフトウェアOCRで認識できなかったものを使っているそうです。

■reCAPTCHA: Stop Spam, Read Books


そんなreCAPTCHAをPHPで動作させてみたのでその手順をご紹介します。結論から言うと至極簡単でした。

サインアップ
reCAPTCHAを使用するにはサービスに対してサインアップを行うことが必要です。
具体的に必要な情報としては、Googleのアカウントでログインし、reCAPTCHAを使用するサイトのドメインを入力する必要があります。

「GET reCAPTCHA」→「Sign up Now!」

ドメイン名を入力することで2つのキー文字列が得られます。

Public KeyとPrivate Key。これで準備は完了。

ライブラリ(PHP)を取得する
以下が開発者ガイド。

■Developer's Guide - reCAPTCHA ― Google Developers

Parl、PythonRubyなどいろいろありますが、ここではPHPのライブラリを取得します。

■Downloads - recaptcha - Plugins and libraries for the reCAPTCHA API - Google Project Hosting

「recaptchalib.php」というソースがライブラリとなります。

動かしてみる
ライブラリに付属している「example-captcha.php」を実行します。
ただし、そのままでは当然動作せず、Private Key、Public Keyの2つのキーをソース上に指定します。
以下、そのサンプル。そのままでは芸がないので、テーマ機能を使って「clean」のテーマに変更しています。

<html>
<body>
<script type="text/javascript">
var RecaptchaOptions = {
	theme : 'clean'
};
</script>

<form action="" method="post">
<?php
require_once('recaptchalib.php');

// Get a key from https://www.google.com/recaptcha/admin/create
$publickey = <Public Key>;
$privatekey = <Private Key>;
$resp = null;
$error = null;

# was there a reCAPTCHA response?
if ($_POST["recaptcha_response_field"]) {
	$resp = recaptcha_check_answer($privatekey, 
			$_SERVER["REMOTE_ADDR"],
			$_POST["recaptcha_challenge_field"],
			$_POST["recaptcha_response_field"]);
	if ($resp->is_valid) {
		echo "You got it!<br />";
	} else {
		# set the error code so that we can display it
		$error = $resp->error;
	}
}
echo recaptcha_get_html($publickey, $error);
?>
<input type="submit" value="submit" />
</form>
</body>
</html>

■reCAPTCHA サンプル


You got it!
recaptcha_check_answer関数の関数値->is_validに認証の可否が入ってます。
この値がTRUEならその先の処理に進めばいいわけです。
おまけ:Mailhide
Mailhideとはメールアドレスの文字列をサイト上に非表示にし、迷惑メールを防止する目的のものです。reCAPTCHAで認証することではじめてメールアドレスが表示されます。

■Mailhide サンプル

reCAPTCHAとはキーが異なるのでご注意。8分くらいハマった。