本文へスキップ

Supabase leaked password protection:何を防ぐのか

Supabase

Markdownで表示Claudeで開くChatGPTで開くPerplexityで開く

質問もコピーされます。チャットが空で開いた場合は貼り付けてください。

TL;DR

leaked password protectionは、Have I Been Pwnedの漏えいデータに含まれるパスワードを、Supabase Authに拒否させる設定です。Proプラン以上で使えます。2026年10月23日時点で、このデータにはpassword123が2,266,543回含まれていましたが、デフォルト設定の私のローカルSupabase Authは、サインアップでそれを受け付けました。強度は判定しません。Lovable2026!は0回でした。使える場合はオンにし、使えない場合でも最小文字数を長くしてください。

私の無料のSupabaseセキュリティチェッカーは、プロジェクトのAuth設定を読み取ります。ルールの1つが「漏えいパスワードの保護がオフ」で、「パスワードの最小文字数が短い」と並んでいます。このノートでは、この設定が実際に何を確認するのかを、同じサービスから取った数字で説明します。

Supabaseのleaked password protectionとは?

DashboardのAuth設定にある、パスワード関連の設定の1つです。オンにすると、Supabase Authは新しいパスワードをHave I Been PwnedのPwned Passwordsサービスで確認し、そこで見つかったものを拒否します。Supabaseのパスワードセキュリティのガイドは、最小文字数や必須文字種と並べてこの設定を挙げ、Proプラン以上で使えると書いています。

この確認では、パスワードそのものは送信されません。Pwned Passwordsはk-匿名性のレンジクエリを使います。クライアントがパスワードのSHA-1ハッシュを計算し、ハッシュの先頭5文字だけを送り、返ってきたサフィックスをローカルで照合します。

よくあるパスワードは、漏えいにどれだけ現れる?

2026年10月23日に、同じレンジクエリを自分で実行しました。テストアカウントやAIが生成したシードデータでよく見るパスワードをいくつか選んでいます。

各パスワードが既知の漏えいに現れた回数。Pwned Passwords range API、2026年10月23日。qwerty123:13,871,714、password123:2,266,543、Password1!:584,516、Welcome1!:239,099、Summer2026!:45、supabase123:7、Lovable2026!:0。
出典:Have I Been PwnedのPwned Passwords range API、2026年10月23日に照会。
パスワード 漏えいで確認された回数
123456 210,461,208
qwerty123 13,871,714
password123 2,266,543
Password1! 584,516
Welcome1! 239,099
Summer2026! 45
supabase123 7
Lovable2026! 0

123456は、ほかのすべての棒をつぶしてしまうので、グラフから外しました。大事なのは最後の3行です。パスワードはどの漏えいにも含まれていなくても、推測されやすいことがあります。leaked password protectionが防ぐのは、既知のパスワードによるクレデンシャルスタッフィングです。強度を測るものではありません。

この設定がないとどうなる?

デフォルト設定のローカルSupabaseスタック(CLI 2.109.1、Auth v2.192.0)で、テストユーザーをpassword123でサインアップしました。Authは200を返し、ユーザーを作成しました。拒否したのは5文字のパスワードだけで、422 weak_passwordと理由lengthが返りました。ローカルのデフォルトの最小文字数が6文字だからです。

つまりこの設定がなければ、文字数のルールを除いて、何百万回も漏えいしたパスワードとユーザーの間を遮るものは何もありません。

何を設定すべき?

  1. Proプラン以上: leaked password protectionをオンにします。既存のユーザーはそのままサインインでき、ガイドによると、新しい要件を満たさないパスワードのユーザーには理由を説明するWeakPasswordErrorが返るので、変更を促せます。
  2. すべてのプラン: 最小文字数を長くします。ガイドは8文字未満を非推奨としており、私のチェッカーのルールは12文字以上を勧めています。
  3. 文字種の必須化は、ユーザーが受け入れられる場合だけにします。必須の記号より、長さのほうが効果があります。
  4. 大切なアカウントにはMFAを追加し、パスワードを変更するときは現在のパスワードか再認証のnonceを要求します。どちらも同じガイドに載っています。

leaked password protectionは、リポジトリではなくホスト版プロジェクトの設定にしか存在しない、いくつかのAuth設定の1つです。RLSからサインインのレート制限まで、Supabaseのアプリで私が確認するそのほかの項目はLovableアプリのセキュリティチェックリストにあり、Supabaseが担当する範囲とあなたの担当の区別はSupabaseは安全かにあります。

© 2026 Denys Zaichenko. 元の記事: https://madsalt.tech/ja/notes/supabase-leaked-password-protection/