HaveIBeenPwned を自分で実行せずに、サインアップ時に侵害されたメールをチェックします
侵害された認証情報を保存する前に捕捉します。 単一の API 呼び出し、Next.js ルート ハンドラー、およびサインアップ レイテンシに 40 ミリ秒を追加する React Hook Form バリデータ。
復帰ユーザーは、お気に入りのパスワードをサインアップ フォームに入力します。 このパスワードは、2024 年の AT&T ダンプ、2023 年の 23andMe 侵害、2022 年の LastPass ボールトの抽出で漏洩しました。 ハッシュを保存し、bcrypt に成功したことを祝福すると、3 週間後に認証情報詰め込みボットがブラジルの居住プロキシからアカウントに侵入します。
修理代は安いですよ。 サインアップ時の 1 つの API 呼び出しにより、電子メールが既知の侵害コーパスに表示されるかどうかがわかります。 このシグナルを使用して、MFA を強制したり、より強力なパスワードを要求したり、サインアップをレビュー キューに追加したりできます。 この投稿では、エンドポイント、Next.js ルート ハンドラー、およびサインアップのレイテンシーに約 40 ミリ秒を追加する React Hook Form バリデーターを示します。
後でではなくサインアップ時に侵害チェックを行う理由
クレデンシャル スタッフィングが機能するのは、ユーザーの 65% がサイト間でパスワードを再利用しているためです (2019 年の Google/Harris、2023 年の Bitwarden 調査で再現)。 過去 14 件の侵害に関連する電子メールは、インターネットからランダムに抽出されたものではありません。 それは、14 の異なる漏洩ベンダーに同じパスワードを渡したユーザーです。 彼らがあなたのフォームに同じものを入力した可能性は非常に高いです。
サインアップ時にチェックすると、往復の料金がかかります。 乗っ取り後の確認には、サポート チケット、返金、信頼性と安全性のレビュー、さらには GDPR 違反の通知が必要になります。 パスワードがユーザー テーブルに入力された後ではなく、その前にシグナルが必要です。
1 つの API 呼び出し、2 つのシグナル
POST /v1/breach/check 電子メールまたはパスワードを受け入れます。 メールでのお問い合わせはこちらです。
3 つのコーパスに表示される住所に対するサンプル応答。
注目すべきことが 2 つあります。 breach_count そして breaches 配列からはデータセット名、日付、総レコード数が得られます。 漏洩したパスワード、漏洩した完全な記録、または送信したもの以外の PII は返されません。 password_exposed を渡した場合にのみ設定されます。 password リクエスト本文のフィールド。 サインアップの場合、リスクを階層化するには電子メールだけで十分です。
HaveIBeenPwned の k-anonymity API は個人使用には無料で、パスワード プレフィックス検索に優れています。 運用規模では、キーごとに月額 3.50 ドルを支払い、SHA-1 プレフィックス処理とクライアント側のレート制限を維持します。 botoi エンドポイントはその配管をラップし、エッジ キャッシュ、残りの API との統合認証、および単一の請求書を追加します。
Next.js ルート ハンドラー
API キーがサーバー上に残るように、呼び出しを独自のルートの背後に置きます。 Zod で入力を検証し、300 ミリ秒の AbortController タイムアウトを追加し、アップストリーム エラーでフェール オープンするため、遅い侵害チェックによって実際のサインアップがブロックされることはありません。
名前を付ける価値のあるデザインの選択肢がいくつかあります。 P95 の応答は 120 ミリ秒であり、それより遅いものは一時的なものであるため、タイムアウトは厳しく (300 ミリ秒) なります。 フェールオープン ブランチが戻ります risk: 'low' そのため、不安定な第三者があなたの登録フォームを削除することはできません。 の tier() この関数はリスク ポリシーが存在する唯一の場所であるため、後で調整するのが 1 つの違いとなります。
クライアント側の React Hook Form バリデーター
キーストロークごとにリクエストが発行されないように、500 ミリ秒ごとにデバウンスします。 結果の送信ボタンをブロックしないでください。 警告を表示し、代わりに MFA を事前に切り替えます。 警告は変換します。 ハードブロックはユーザーを失います。
フックを React Hook Form コンポーネントに接続します。 の watch 呼び出しは電子メールをフックにフィードし、その結果、MFA ボックスで違反したアドレスがないか事前チェックされます。
結果をどうするか
侵害カウントをポリシーに変換します。 この表から始めて、スコアから 2 週間のサインアップが遅れたら調整してください。
| 違反数 | アクション | UX | なぜ |
|---|---|---|---|
| 0 | 進む | 変化なし | 以前の侵害の公的証拠はありません。 デフォルトのパス。 |
| 1-3 | プロンプトMFA | MFA ボックスを事前にチェックし、ソフト警告を表示します | 侵害ごとに 1 つのパスワードが再利用されるのが一般的です。 新しいアカウントを保護するようにユーザーを促します。 |
| 4-10 | MFA + 強力なパスワードを強制する | 最初のログイン前に TOTP 登録が必要です、最小 14 文字 | 繰り返し暴露されると、その電子メールがすべての主要な資格情報リストに含まれることが示唆されます。 ここでの弱いパスワードは、乗っ取りの発生を待っています。 |
| 10+ | 摩擦のあるソフトブロック | キャプチャを追加するか、手動レビューに送信します | この電子メールは事実上公開されます。 アカウントを作成する前に、攻撃者のコストを増やしてください。 |
120 ミリ秒未満でさらに 2 つのチェックをスタックします
侵害チェックだけでパスワードの再利用リスクを検出します。 と組み合わせてください /v1/disposable-email/check tempmail ドメインにフラグを設定し、 /v1/vpn-detect データセンターまたは Tor ソース IP にフラグを立てると、P95 で 120 ミリ秒未満で並列実行される 3 つの信号のスコアカードが得られます。 完全なスコアリング パターン (重み、しきい値、監査ログ) は次の場所にあります。 3 つの API チェックでサインアップ詐欺を阻止。
無料の API キーを取得するには、 botoi.com/api/signup。 無料利用枠は 1 日あたり 1,000 回の侵害チェック (5 リクエスト/分バースト) をカバーしており、小規模な SaaS や、エンドポイント経由で過去 30 日間のサインアップを再生し、チャーンや悪用のデータに対して上記の利用枠を調整するのに十分です。
エンドポイントの完全なリファレンス: 違反チェックAPI。
FAQ
- これによりメールアドレスがbotoiに漏洩するのでしょうか?
- 電子メールは TLS 経由で API に到達し、違反の一致を計算するためにのみ使用されます。 リクエストボディはアクセスログに保存されません。 メソッド、パス、ステータス、レイテンシーのみが 30 日間保持されます。 完全なデータ処理ステートメントについては、API ドキュメントを参照してください。
- 一般的な遅延はどれくらいですか?
- 応答時間の中央値は、Cloudflare Workers エッジノードからは 40 ミリ秒、95 パーセンタイルでは 120 ミリ秒です。 この投稿のハンドラーは、遅い呼び出しによってサインアップ フォームがブロックされないように、300 ミリ秒の AbortController タイムアウトを設定します。
- 侵害データセットはどれくらい新しいですか?
- データセットは、パブリック ダンプ (HIBP で追跡された侵害、クレデンシャル スタッフィング リスト、コレクション #1 ~ #5) から毎週同期されます。 新しいコーパスは公開から 7 日以内に表示されます。
- パスワードを直接確認できますか?
- はい。 SHA-1 プレフィックス (最初の 5 つの 16 進数文字) またはプレーンテキストのパスワードを同じエンドポイントに POST します。 プレフィックス形式は、完全なハッシュがブラウザを離れることがないため、クライアント側の呼び出し元にとってより安全です。 サーバーからのプレーンテキストのみを使用してください。
- これはGDPRに準拠していますか?
- 侵害チェックは、GDPR 第 32 条 (処理のセキュリティ) に基づくセキュリティ対策です。 処理活動の記録にチェックを文書化し、DPA に処理者として botoi をリストし、法的根拠 (アカウント乗っ取りを防止する正当な利益) を書き留めます。
botoiで開発を始めよう
150以上のAPIエンドポイント。検索、テキスト処理、画像生成、開発者ユーティリティに対応。無料プラン、クレジットカード不要。