今回はCAPTCHAと呼ばれるスパム対策としては有名な一策であるreCAPTCHAを導入する話です。開発中のシステムに導入したときの作業のメモ代わりに書いています。
記事の構成はこんな感じです。
- Part1:まずはライブラリを利用して普通に導入する(この記事)
- Part2:HTML5として妥当なものに改造する
(たぶん来週)公開しました
みなさんご存じ、CAPTCHA。このゆがんだ文字を見たことがないとは言わせません。
まずは普通に導入
これを導入するのは実に簡単なことでGet reCAPTCHAからサインアップして、公開鍵と秘密鍵の鍵ペアを手に入れることができれば、半分は終わりです。
つぎに、Google Developersからライブラリをダウンロードします。先にドキュメント(英語)には一通り目を通しておきましょう。
こちらのリンクからダウンロードしてください。
まずは普通に導入してみます。ここでは分かりやすいように、form.phpからreceive.phpにフォームを送信する状況を想定します。
ディレクトリ構成は
/form.php(送信側)
/receive.php(受信側)
/recaptchalib.php(ライブラリ)
となります。
form.phpはこんな感じのイメージになります。
<!DOCTYPE HTML> <html> <body> <!--ほかのコンテンツ--> <form action="recieve.php"> <!--ほかのフォーム要素--> <?php require_once("recaptchalib.php"); $publickey = "公開鍵を指定します"; echo recaptcha_get_html($publickey); ?> <!--ほかのフォーム要素--> </form> <!--ほかのコンテンツ--> </body> </html>
関数recaptcha_get_htmlは第一引数に公開鍵を指定します。任意で第二引数にエラー関連、第三引数にSSLの使用を強制するかどうかを指定できます。
そして、receive.phpはこんな感じ。
<!DOCTYPE HTML> <html> <body> <!--ほかのコンテンツ--> <?php require_once("recaptchalib.php"); $privatekey = "秘密鍵を指定します&"; echo recaptcha_get_html($publickey); $resp = recaptcha_check_answer ($privatekey, $_SERVER["REMOTE_ADDR"], $_POST["recaptcha_challenge_field"], $_POST["recaptcha_response_field"]); if (!$resp--->is_valid) { //CAPTCHA認証に失敗したときの処理 } else { //CAPTCHA認証に成功したときの処理 } ?> <!--ほかのコンテンツ--> </body> </html>
当然のことですが、導入はこれで終わりです。
しかし、これがHTML5文書として適当であるかと聞かれると、答えは「NO」です。次回はHTML4.01からHTML5への移行に伴って発生した問題を解決していきます!たぶん来週になりますが…