Supabase プロジェクトが世界に見せているものを確かめる
anon キーは公開される前提のものです。守っているのは Row Level Security。そして、それを素通りできる唯一のキーは、決してブラウザに届いてはいけません。攻撃者と同じように外側から両方を確認します。データには触れません。
無料・登録不要。基本診断は、通常のブラウザと同じリクエストしか送りません。
確認すること
- 重大無料診断
フロントエンドにある service_role キーや sb_secret キー
どちらも Row Level Security を完全に素通りします。ページとスクリプトを探し、キーを伏せ字で、含まれているファイルとともに表示します。
- 重大Pro
anon キーで読めるテーブル
ドメイン確認後、アプリが使うテーブルごとに HEAD リクエストを1回送り、誰でも読める行数を報告します。中身を取得することはありません。
- 参考Pro
RLS で守られているテーブル
anon キーに対して0行を返すテーブルも一覧に載せるので、ポリシーがきちんと働いていることが分かります。
- 参考無料診断
アプリが通信しているプロジェクト
ページで見つかった Supabase プロジェクトとキーの種類。anon キーや publishable キーは想定どおりで、指摘にはなりません。
5 分で自分で確認する
私たちが外から確認することは、すべてご自身のダッシュボードとターミナルで確認できます。必ずご自身のプロジェクトだけで行ってください。
Row Level Security のないテーブルを一覧にする
Supabase ダッシュボード → SQL Editor。デフォルトの権限付与が残っていれば、rowsecurity = false の public テーブルはどれも anon キーで読めます。Security Advisor(Advisors → Security)にも同じ一覧が表示されます。
select tablename, rowsecurity from pg_tables where schemaname = 'public' order by rowsecurity, tablename;
見知らぬ人として試す
サイトにある anon キーを使います。すべての訪問者が持っているのと同じキーです。これで行が返ってくるなら、誰に対しても返ってきます。
curl 'https://<project>.supabase.co/rest/v1/<table>?select=*&limit=1' \ -H "apikey: <anon key>" \ -H "Authorization: Bearer <anon key>"
secret キーがブラウザに届いていないか確かめる
公開中のサイトで DevTools を開き、読み込まれたすべてのファイル(Cmd/Ctrl + Option/Alt + F)で service_role と sb_secret_ を検索します。1 件でも見つかったら、Project Settings → API でキーをローテーションし、そのコードを Edge Function に移してください。
RLS を有効にしてポリシーを追加する
ポリシーなしで RLS を有効にすると、すべてがブロックされます。テーブルの使い方に合ったポリシーを追加してください。ユーザープロフィールのテーブルなら:
alter table public.profiles enable row level security; create policy "read own profile" on public.profiles for select using (auth.uid() = id);
AI が適用できる修正
レポートのプロンプトはテーブル名と具体的な問題を挙げ、アプリが各テーブルをどう使っているかに合ったポリシーで RLS を有効にするよう、AI に指示します。
app.example.com の次の問題を修正してください。 1. テーブル "profiles" が anon キーに 1,240 行を返しています。 Row Level Security を有効にし、ユーザーが自分の行だけを select できるポリシーを追加してください(auth.uid() = id)。 2. テーブル "orders" が anon キーに 87 行を返しています。 RLS を有効にし、select は注文の所有者だけに許可してください。 完了したら再診断:https://scanyoursite.app/ja?check=app.example.com
新しいテーブルは、新しいリスク
マイグレーションのたびに、ポリシーのないテーブルが増えるかもしれません。Pro では定期診断のたびにテーブル診断も実行され、新たに公開状態になったテーブルはその日のうちにお知らせします。
プランを見るよくある質問
テーブル診断にドメイン確認が必要なのはなぜですか?
データベースへの問い合わせは、ブラウザがページで行うことの範囲を超えます。そのため所有者に対してのみ行います。確認は DNS レコード、ファイル、メタタグのいずれかで行えます。
データは保存されますか?
いいえ。HEAD リクエストで行数を数え、保存するのは行数とテーブル名だけです。
anon キーは漏えいですか?
いいえ。設計上、公開されるものです。問題ではなく参考情報として報告します。
URL を貼るだけ。1分ほどで一覧が届きます。
どの指摘にも、あなたにとっての影響と直し方が付いています。AI コーディングツールにそのまま適用させるプロンプトとしても受け取れます。
無料・登録不要。基本診断は、通常のブラウザと同じリクエストしか送りません。