GoogleからreCAPTCHAのAPIのバージョンアップをしないと使えなくなるぞという連絡が来た。
reCAPTCHAはこのBlogでトラックバックスパム対策に使っている。
画像の文字を打ち込むことでBotでないことを確認すると。
APIが変わるとどうなるんだろうということで見てみると驚きの変貌を遂げていた。
I’m not a robot(私はロボットではありません)というチェックボックスにチェックを入れるだけで、判定できるようになるらしい。
えっ、それで人間かBOTか判定が付くの? と思ったかも知れないが、別にこの行為だけで判定しているわけではない。
GoogleではreCAPTCHAにアクセスするユーザーの挙動を観察して、人間っぽいかBOTっぽいか調べているのよね。
ここで人間っぽいと判断されればチェックを入れるだけだが、BOTっぽいと判断されれば画像などを使った認証が必要となる。
デバッグ中にreCAPTCHAへのアクセスを繰り返したら、BOTっぽいと判断されてしまい、
「私はロボットではありません」にチェックを入れると、写真を使った認証画面が出てきた。
ここで正解すればチェックが入るという仕組みになっている。
以前からreCAPTCHAではユーザーの挙動を解析するということをやっていた。
人間っぽいと判断されれば簡単に読める文字が、BOTっぽいと判断されれば読みにくい文字が表示されていた。
これをさらに推し進めてreCAPTCHA v2では、人間っぽいと判断されればチェックを入れるだけでOKとすることにした。
さらにこれを推し進めたものとして Invisible reCAPTCHA というモードがある。チェックを付けなくても認証が完了するモードだそうで。
一方で、BOTっぽいと判断されたときの問題も文字を打たせるではなく、写真を選ばせるという問題に変わっている。
これはスマートフォン・タブレットでの使い勝手を考慮してのことらしい。
人間にとっては易しく、BOTにとっては難しく、ということを考えると文字認識という問題はやめた方がよいと考えたようだ。
導入法だが、まず、上記WebサイトでAPIキーを入手する。
そして、認証を必要とするページのHTMLにコードを貼り付ける。
最低限、script要素とdiv要素を1行ずつ貼るだけで完了する。
その上で、認証結果を受け取ったら、APIのURLにシークレットキー・認証結果・ユーザーのIPアドレスを投げると、
認証結果がJSONで返ってくるから、successがtrueかfalseか確認する。
サンプルコードを探してきて貼ってもいいけど、自分で書いても高々知れているので、今回は自力で書いた。
というわけでトラックバックURL作成ページを見てみると、
「私はロボットではありません」のチェックボックスが表示される形式に変わっているはず。
実態としては使用実績はごく少ないんだけど、今後も安心ということで。
そしてもう1つ、reCAPTCHA使ってるところあったな。
メールアドレスを隠すのに、Mailhideを使ってるんだよね。
Mailhideは古いreCAPTCHAのAPIを未だに使ってるので、大丈夫かなぁと。
Mailhide側で新しいAPIに移行してくれれば対応不要なんだけど、そもそもメンテナンスされてるんかいって話。
reCAPTCHA v2を使ってE-mailを隠すものを自作しますかね?