無料ツール · ブラウザ完結 · @aegiskit
あなたの RLS は「認証」で止まっていないか、その場で判定
RLS ポリシーの SQL を貼るだけ。「ログイン済みか」しか見ていない(=全ユーザーが全行を読める)ポリシーを、所有者スコープの正しい形と区別して即座に分類します。存在チェックではなく、正しさのチェックです。
SQL はこのブラウザから出ません(ネットワーク送信なし)
判定結果
上に CREATE POLICY 文を貼るか、例を読み込んでください。判定はこのブラウザ内で即座に行われます。
「所有者スコープでない」=「脆弱」ではありません。共有・参照テーブルでは認証のみが正しい設計です。これは意図の確認を促す中程度の指標で、確定した脆弱性ではありません。判定は保守的(fail-secure)で、確信が持てない述語は警告しません。正式な解析は npx @aegiskit/cli scan(コード横断+CI)が担います。
仕組み
「存在」ではなく「正しさ」を見る
多くのスキャナは「RLS が有効か」しか見ません。このツールは述語の意味を分類し、認証だけのポリシーを所有者スコープと区別します。
- 1
肯定的なゲートで判定
「穴」は auth.uid()/auth.jwt() IS NOT NULL か auth.role() = 'authenticated' だけと定義。service_role・JWT クレーム・引用符付き識別子・カスタム関数は抑制します。
- 2
所有者束縛を認識
auth.uid() = user_id、キャスト、(select auth.uid()) の性能ラッパ、IN (col, col) の参加者束縛、大小無視のメール一致まで正しく「安全」と分類します。
- 3
迷ったら警告しない
確信の持てない述語は fail-secure で抑制。誤検知(オオカミ少年)を出さないことが、ツールを信頼してもらう条件です。
プライバシー
あなたの SQL は、このブラウザから一歩も出ません
- 分類は 100% クライアントサイド(あなたの端末内)で実行されます。サーバーへの送信・保存・ログは一切ありません。
- デプロイ済みのアプリを叩くこともありません。静的なテキスト解析のみで、稼働中のシステムには接触しません。
- これは Aegis の CLI(1,000 リポで precision 1.0 を検証)の分類ロジックを移植した軽量プレビューです。
リポジトリ全体を、CI で継続的にチェックする
このプレビューは 1 つのポリシーを見ます。CLI は supabase/migrations 全体とあなたの Next.js コードを横断し、SARIF を GitHub に出力、CI で高信頼の所見だけをブロックします。設計そのものの検証が必要になったら、有料監査へ。
npx @aegiskit/cli scanインストール不要・設定不要。ローカルで実行し、稼働中アプリには接触しません。
FAQ
貼り付けた SQL はどこかに送られますか?
いいえ。判定は完全にあなたのブラウザ内で実行され、SQL がネットワークに送られることはありません。稼働中のアプリにも接触しません(静的解析のみ)。
auth.role() = 'authenticated' の何が問題ですか?
ログイン済みであることしか証明しません。つまり全ログインユーザーが全行を読めます。所有者に絞るには auth の識別子を所有者列に束縛します:using (auth.uid() = user_id)。意図的な共有テーブルなら認証のみでも適切です。
「認証のみ」=「脆弱」ですか?
いいえ。共有・参照テーブルでは正しい設計です。この判定は「意図を確認してください」という中程度の指標で、確定した脆弱性ではありません。
CLI と何が違いますか?
これは 1 つの述語を見る軽量プレビューです。npx @aegiskit/cli scan は supabase/migrations 全体とあなたの Next.js コードを横断し、SARIF を出力し CI に統合し、INSERT/UPDATE/DELETE の書き込み側まで検査します。CLI が正式なツールです。