以下省略!

タイダルウ(ry ほぼ毎日1記事執筆運動実施中。 ※記事に広告(アフィリエイト)リンクを掲載している場合があります。

Asirraという猫認証とやらを試してみるテスト。 (追記:サービス停止中?)

2015/10/17追記 追記現在challenge.asirra.comに接続できないっぽい。サービスが終了したのかは不明ですがサンプルは公開停止しました(サンプルコード表示だけ残しておきます)。

AsirraというMicrosoft Researchの猫認証(CAPTCHA)サービスを試してみるなど。もなっくすの登録時のCAPTCHAに利用されていたので。

  • 複数の猫、犬の写真の中から猫だけを選ぶことで人間かどうか認証する。
  • 設置側はユーザー登録不要で気軽に利用できるのがいいところ。
  • JavaScriptがONでないと動作しない(reCAPTCHAなどはnoscript時のことも考えているが)。
  • 猫と犬の写真はPetfinder.comの画像を利用している。

公開されているサンプルコードを参考にPHPでの実装を書いてみた。
http://rita-mordio.info/testrun/asirra-test.php (ソース)

手順的には、

  1. AsirraのJavaScript*1を挿入したい位置で読み込ませて猫認証を表示させる。
  2. 猫の写真だけが選ばれ送信ボタンが押される。
  3. 実際にフォームが送信される前にJavaScript(Asirra_CheckIfHumanという関数を利用。引数にはコールバック先の関数を渡す)でAsirraのサーバーに正解かどうか確認を行う。
  4. コールバック先関数に渡された結果が正解(true)であればフォーム送信、不正解(false)であればエラーメッセージなどを出す
  5. プログラム側で本当に正解だったかどうか確認を行う。Asirra_Ticketが一緒に送信されてくるのでそれをAsirraのサーバーに送信して確認する。ticketは1回限り有効なので二重送信対策にもなるかも。
  6. 確認が取れたらプログラムの処理を続行

みたいな感じになる。
なお、asirraState.SetEnlargedPositionという関数で拡大写真の表示位置の変更、asirraState.SetCellsPerRowという関数で1行に表示する写真の数を変更できる。詳しくは公式ページ参照。

そういや猫認証以外にも「○○の写真を選べ」みたいな認証もある模様。。

*1://challenge.asirra.com/js/AsirraClientSide.js