本文へスキップ

Supabaseプロジェクトを OWASP Top 10:2025 の45項目などでチェック

プロジェクトを1つ読み取り専用で接続すると、評価付きのレポートと指摘ごとの修正方法が、このページにそのまま表示されます。

Lovable、Bolt、Cursor、v0 で Supabase のアプリを作るチーム向け。無料、登録不要。

自分の Supabase プロジェクトをチェック

無料、登録不要。読み取り専用で、プロジェクトの内容は一切変更されません。

  1. Supabase を接続supabase.com で読み取り専用のアクセスを承認します。
  2. 45項目をチェックアクセスと RLS、サインイン、ストレージと関数、インフラ。カタログと設定のみで、行のデータは読み取りません。
  3. レポートと AI エージェント用のプロンプト指摘ごとの修正方法と、Cursor、Claude Code、Lovable に貼り付けるプロンプト。共有した場合にのみ保存されます。

チェックで確認できる内容

読み取るもの

  • データベースのカタログ: テーブル、RLS フラグ、ポリシー、権限、ビュー、関数、拡張機能、ロール、Vault の読み取り権限
  • auth の設定: パスワードルール、メール確認、MFA、リダイレクト URL
  • Storage: バケットの一覧、公開されているバケット、サイズとファイル形式の制限
  • Edge Functions: 一覧と、それぞれの JWT 設定
  • プロジェクト設定: Postgres のバージョン、バックアップ、SSL、ネットワーク制限、Data API の行数上限

読み取らないもの

  • テーブル内の行
  • API キーとシークレット: Supabase は設定のレスポンスにその一部を含めますが、スキャンは受信した時点で破棄し、保存・ログ記録・表示は一切しません
  • バケットに保存されたファイル
  • アプリのコードとリポジトリ

レポートは、共有リンクを作成したときだけ、最長7日間保存されます。付与されたアクセス権は、チェックの直後に取り消されます。

読み取りアクセスでは確認できないこと

  • A06 安全でない設計 と A10 例外的な状況への不適切な対処 は、プロジェクト設定ではなく、アプリのコードにあります。
  • フロントエンドの依存関係 (A03 のうち npm の部分) と、フロントエンドのコードに含まれた service_role キーです。リポジトリで確認してください。
  • アプリのコードや Edge Functions の中だけにあるアクセスルール (フロントエンドでの plan = 'pro' のチェックなど)。スキャンが見るのはデータベース自身がポリシー・関数・auth hook で使う列だけなので、書き換え可能なアクセス用の列で合格でも、その列が安全とは限りません。
  • サインイン中のあるユーザーが、別のユーザーの行を読み取れるかどうか。これには、実在する2人のユーザーによるテストが必要です: Supabase の RLS をテストする方法

Supabase Security Advisor とこのチェック

観点Security Advisorこのチェック
実行する場所Supabase ダッシュボード上で、1回に1プロジェクトこのページ上で、読み取り専用の OAuth 認可のあと、選んだプロジェクトに対して実行
読み取る内容データベースの lint同じ lint を1つのチェックとして実行し、さらに auth、storage、Edge Functions、バックアップ、ネットワーク設定も確認
結果のまとめ方lint ごとOWASP Top 10:2025 のカテゴリごと。チェックできないカテゴリも明記
修正のために得られるものlint のドキュメントへのリンク指摘ごとの SQL またはダッシュボードの設定と、AI エージェント向けのプロンプト
残せるものダッシュボード上の一覧PDF、または7日で失効する共有リンク

OWASP Top 10:2025 のカバー範囲

カテゴリチェック数状況
A01 アクセス制御の不備18対応
A02 セキュリティの設定ミス9対応
A03 ソフトウェアサプライチェーンの不備2一部対応 Postgres のバージョンと拡張機能のみ。npm の依存関係はリポジトリ側にあります。
A04 暗号化の失敗4対応
A05 インジェクション1対応
A06 安全でない設計0チェック不可 安全でない設計は、設定ではなく、アプリの動作そのものにあります。
A07 認証の失敗8対応
A08 ソフトウェアまたはデータの整合性の不備1対応
A09 セキュリティログとアラートの不備2対応
A10 例外的な状況への不適切な対処0チェック不可 例外処理はアプリのコードにあり、読み取りアクセスでは確認できません。

全45項目のチェック

チェックIDOWASP最悪の場合
公開されたテーブルで RLS が無効rls_disabled_exposedA01緊急
すべての行を許可するポリシーpolicy_always_trueA01高
ユーザーメタデータを信頼するポリシーpolicy_uses_user_metadataA01高
匿名の訪問者に開かれた書き込みポリシーanon_write_policiesA01高
RLS を迂回するビューviews_without_security_invokerA01高
API に公開されたマテリアライズドビューまたは外部テーブルmatviews_or_foreign_tables_exposedA01中
API から呼び出せる security definer 関数security_definer_executableA01高
匿名の訪問者に開かれたストレージポリシーstorage_objects_anon_policiesA01高
公開されたストレージバケットpublic_bucketsA01低
保護されていない Realtime のプライベートチャンネルrealtime_messages_rlsA01高
匿名の訪問者に残っている未使用の書き込み権限anon_table_grants_writeA01低
RLS をバイパスするロールroles_bypass_rlsA01高
サインイン中のユーザーが変更できるアクセス用の列authz_columns_writableA01高
削除と再挿入で保護された列が変わるdelete_insert_bypassA01高
サインイン中のユーザーに不要なテーブル権限authenticated_table_grants_extraA01低
新しいオブジェクトを API に開くデフォルト権限default_privileges_api_rolesA01低
current_user を確認する security definer 関数definer_checks_current_userA01中
ロールやコマンドを指定していないポリシーpolicies_without_to_or_forA01低
Supabase Security Advisor の指摘advisor_lintsA02高
Data API に公開された余分なスキーマextra_exposed_schemasA02高
リダイレクト URL のワイルドカードredirect_wildcardsA02中
http や localhost を使うリダイレクト URLinsecure_redirect_urlsA02中
匿名サインインが有効anonymous_signins_enabledA02中
サインアップとサインインで CAPTCHA がオフcaptcha_disabledA02中
すべての IP アドレスに開かれたデータベースnetwork_openA02中
アップロード制限のない公開バケットpublic_bucket_no_limitsA02低
Data API の応答に行数の上限がないpostgrest_max_rowsA02中
Postgres のアップグレードが利用可能postgres_upgrade_availableA03中
インストール済みの拡張機能extensions_listedA03情報
データベース接続で SSL が強制されていないssl_enforcement_offA04中
有効期間が1時間を超えるアクセストークンjwt_expiry_longA04中
匿名の訪問者が読み取れる機密に見える列sensitive_columns_exposedA04高
API ロールから読める Vault のシークレットvault_secrets_exposedA04緊急
文字列から組み立てた動的 SQLdynamic_sql_concatA05中
パスワードの最小文字数が短いpassword_min_lengthA07高
漏えいパスワードの保護がオフleaked_password_protection_offA07中
メール確認がオフemail_confirm_offA07高
セキュアなメールアドレス変更がオフsecure_email_change_offA07中
有効期間が1時間を超えるワンタイムコードotp_expiry_longA07中
多要素認証の方式が有効になっていないmfa_unavailableA07中
リフレッシュトークンのローテーションがオフrefresh_token_rotation_offA07中
再認証なしのパスワード変更password_change_no_reauthA07低
JWT 検証のない Edge Functionsedge_functions_without_jwtA08低
pgaudit が未インストールpgaudit_missingA09情報
バックアップが見つからないbackups_or_pitrA09中

よくある質問

Supabase の Security Advisor とは何が違いますか?

Security Advisor の結果は、このチェックの一部です。このスキャンは、auth の設定、storage のポリシー、Edge Functions、バックアップ、ネットワーク設定を加え、すべてを OWASP Top 10:2025 ごとにまとめ、指摘ごとに修正方法を示します。

Supabase はデフォルトで安全ですか?

プラットフォームは Supabase が保守しますが、アクセスルールはお客様の責任です。通常の SQL で作成した新しいテーブルは Row Level Security が無効で、using (true) と書いたポリシーがあると、anon キーを持つ人なら誰でもそのテーブルを読み取れます。スキャンはまさにこうした設定を探します。

「RLS が無効」とはどういう意味で、どう有効にしますか?

公開されたスキーマのテーブルで RLS が無効だと、anon キーを持つ人なら誰でも Data API 経由ですべての行を読み取れます。alter table public.your_table enable row level security; で有効にし、そのうえで必要なアクセス用のポリシーを追加してください。

Supabase の anon キーがブラウザーにあっても安全ですか?

はい。anon (publishable) キーは公開される前提のものです。できるのは権限と RLS ポリシーが許可する範囲だけなので、スキャンはそこを確認します。service_role キーは RLS を迂回するため、ブラウザーに渡してはいけません。

自分のプロジェクトをチェック

無料で読み取り専用。レポートはこのページに表示されます。

自分の Supabase プロジェクトをチェック