この記事では reCAPTCHA v2 と v3 の違いについて説明します。
reCAPTCHA v2 には、Invisible、Checkbox、Android の3種類があります。この記事では v2 Invisible を主に扱います。Checkbox は「私はロボットではありません」のチェックボックスを見せるタイプ、Android はアプリに組み込むタイプで、これらを使いたい場合は、特に迷うことはないと思います。
https://developers.google.com/recaptcha/docs/invisible
v3 は v2 を完全に置き換えるものではありません。v2 は、今後も並行してセキュリティおよびユーザビリティの改善とサポートを行うと、FAQ にあります。
見た目は一緒
v2 Invisible と v3 の見た目は同じです。デフォルトでは、画面の横にバッジが表示されます。このバッジは消すこともできます。
何が違うのか
v2 と v3 の最も大きな違いは、怪しいリクエストを通すかどうかという点です。
v2 は、人間かボットか怪しいリクエストが来たら、画像認証のクイズを出して、ボットをシャットアウトしようとします。
一方、v3 には、画像認証を出す機能はありません。人間だろうがボットだろうが、全てのリクエストを素通しにします。代わりに、リクエストに対して「人間らしさ」のスコアを設定します。
v3 はパワーユーザー向け
FAQ の冒頭に書かれている通り、v3 はパワーユーザー向けです。スコアに応じた対処方法を、自前で実装する必要があります。
低いスコアが出た場合の対処方法は、例えば以下のようなものが考えられます。
- ログイン時に、二要素認証の入力を求める
- ブログコメントをすぐには掲載せず、モデレータが評価するまで保留にする
- 問い合わせをスパムフォルダに保存する
- しきい値を設定して、足切りを行う
足切りというのは、スコアが悪かったら、ボットだろうが人間だろうが、リクエストを拒絶するという意味です。
本当に足切りしていいの?
追加で開発を行うことなく v3 を採用しようとすると、大抵は「足切り」を行うことになると思います。その場合は、導入しようとしているサービスで本当に足切りが許されるのかどうか、よく検討する必要があります。
例えば、お客様からの問い合わせやクレームを受け付けるフォームで「あなたは人間らしくないからエラーにします」と言って許されるのかどうか、ということです。何人のお客様がエラーで離脱したか、本当のところはわかりません。
スパムフォルダのような機能があるなら、v3 は非常に良い選択肢です。ただし、その場合は、誤検知を定期的にチェックしなければなりません。
導入先の違い
v3 の導入ページ
v3 はユーザのインタラクションを邪魔しないので、できるだけ複数のページに導入することが推奨されています。
例えば、WordPress の人気プラグイン Contact Form 7 ではv3 を全ページに導入する 前提で足切りを行っているようでした。v2 を捨てて v3 に移行した意図はわかりませんが、全ページに入れれば十分な精度が出せるという判断なのかもしれません。
v2 の導入ページ
v2 は、アクションが起きる特定のページにだけ導入すれば十分です。他に入れられる場所がありません。
reCAPTCHA トークンは有効期限が 2 分と非常に短いので、確認画面がある場合は、確認画面に入れるのが適切です。トークンを、フォームから確認画面へと持ち回るべきではありません。
v2 Invisible では、送信ボタンを押してからサーバで検証するまでの期間が 2 分です。v2 Checkbox は、チェックを入れた状態でしばらく放置すると、勝手にチェックが外れます。
まとめ
v2 と v3 は守備範囲が違うので、使い分けが必要です。検索すると v3 が v2 の改良版・高機能版だという解説が山ほど見つかりますが、間違いです。
v3 単体では、v2 のようにボットを排除することはできません。v2 の画像認証の代わりに、自力でなんとかする(できる)のが v3 です。
単にお問い合わせフォームやコメント、ユーザ登録などでスパムを避けたい場合は、v2 Invisible を使う方が簡単です。