🔒

reCAPTCHA ってざっくり何なの?

に公開

reCAPTCHA って何?

改めて整理したうえで簡単にまとめていく

reCAPTCHA とは

Google が提供する bot 対策サービス
フォーム送信やログインなどのアクションが「人間によるもの」か「bot(機械)によるもの」かを判定する仕組み

https://developers.google.com/recaptcha?hl=ja

仕組み

ユーザーのブラウザ上での行動(マウスの動き・クリックパターン・閲覧履歴など)を Google が分析し、bot らしさをスコアリングする

ユーザー操作
 ↓
フロントエンド(reCAPTCHA トークン発行)
 ↓
バックエンド(Google の API にトークンを送信して検証)
 ↓
判定結果をもとに処理を分岐

v2 と v3 の違い

v2 v3
ユーザー操作 あり(チェックボックス) なし(完全に裏側で動く)
判定方式 チャレンジ(画像選択など) スコアリング(0.01.0
UX やや煩わしい シームレス
実装 比較的シンプル スコアに応じた分岐が必要

v2(チェックボックス型)

「私はロボットではありません」のチェックボックスをユーザーが押す形式
怪しいと判定された場合は画像選択などのチャレンジが追加で表示される

https://developers.google.com/recaptcha/docs/display?hl=ja

v3(スコアベース型)

ユーザーに何も操作させず、裏側でスコア(0.01.0)を返す
1.0に近いほど人間らしく、0.0に近いほど bot らしいと判定される。

https://developers.google.com/recaptcha/docs/v3?hl=ja


補足(reCAPTCHA 以外のアプローチ)

以下のような手法が用いられる

ハニーポット(Honeypot)

フォームに非表示のフィールドを設置する
人間には見えないため入力しないが、bot は自動的に入力してしまう
入力があれば bot と判定する

<!-- CSSで非表示にする(display:none は bot に検知されやすいため position で隠す) -->
<input type="text" name="hnp" style="position:absolute; left:-9999px;">

レートリミット(Rate limit)

同一 IP からの短時間での大量リクエストを制限する
シンプルで導入コストが低い

メール認証・SMS認証

登録後にメールや SMS で本人確認を行う
bot 対策としては重厚だが、確実性が高い

Discussion