はじめに
前回はバックエンドの脆弱性についてお話ししました。今回はデータベース、特に Supabase を使ったときの脆弱性について紹介します。個人開発で利用している方も多いサービスなので、ぜひ押さえておきましょう。
Supabaseの仕組みと、その裏にあるリスク
Supabaseは、フロントエンドから直接データベースに対してクエリを投げられるという仕様になっています。クエリとは、データの取得・更新・削除・追加といった処理(問い合わせ)のことです。これらをすべてフロントエンド経由で実行できます。
つまり、バックエンドを作らなくてもフロントエンドからデータベースを扱えるというのがSupabaseの良さです。AIを使ったバイブコーディングとも相性がよく、使い勝手のよさから選択する方も多いと思います。
しかし、フロントエンドから直接データベースにアクセスできるということは、裏を返せばセキュリティ上のリスクにもなります。特に非エンジニアの方にとっては、セキュリティの観点から扱いが難しい場面があります。
RLS(Row Level Security)で守る
では、どうやってセキュリティを守るのかというと、RLS(Row Level Security)ポリシーの設定です。Row Level Security は「行レベルのセキュリティ」という意味で、テーブルの行単位で制限を設ける手法です。
テーブルはExcelのように行と列でデータを管理しますが、その行レベルで制御をかけます。たとえば次のような制限です。
- 特定の行に対するデータ取得を制御する
- 削除を制限する
- データ操作はログインしているユーザー本人しかできないようにする
こうした制御を、データベース側で細かく決める設定が RLS です。
RLS設定の難しさ
この RLS の設定は、なかなか難しいものです。SupabaseのMCPサーバーをつなげれば Claude Code がある程度設定してくれますが、それでも抜け漏れが出ることがあります。MCPをつないでいない場合、自力ですべての脆弱性を防いだうえで RLS を設定するのは、ほぼ困難だと言えるでしょう。
最近のClaudeは Opus 4.8 になり、MCP経由であればかなり厳重に RLS を設計できるようになりました。とはいえ、フロントエンドから常に直接データベースへ問い合わせできてしまうという環境そのものに、不安が残ります。
「RLSポリシーをきちんと意識して設定できている」「意味も理解している」と言えるのであれば、Supabaseを使っても問題ありません。ただ、少しでも不安がある場合は、別の選択肢を検討するとよいでしょう。
代替案:TursoやConvex
不安がある場合は、Turso や Convex といったサービスを使うのも一つの方法です。Convexはスマホアプリでも使え、使い勝手のよいサービスです。
これらの場合、フロントエンドから直接データベースを叩くことはできません。バックエンドを経由しないとデータベースにアクセスできない仕組みになっています。
フロントエンドから直接アクセスする場合に比べて、バックエンドでセキュリティチェックを挟めるのが大きなメリットです。たとえば次のようなチェックです。
- 認可チェック
- 認証チェック
- バリデーションチェック
これは多層防御の考え方です。何段階も厳重にチェックを通すため、データベースに不正にアクセスしづらくなります。基本的にどのアプリケーションでも、データベースにアクセスする際はAPIを経由させています。
Convexの場合、API自体は作らなくてもよいのですが、Convex側でサーバー関数を作ります。実質的にAPIのようなものを用意することになるため、Supabaseよりも安全だと判断しています。
注意喚起
特に非エンジニアの方が、バイブコーディングでデータベース込みのサービスを公開すると、危険な状態になりやすいです。SNSなどでもそうした話題を目にしたことがある方がいるかもしれません。Supabaseを使っているバイブコーダーの方は、特に気をつけてください。
逆に、「きちんとバックエンドを経由している」「認可・認証・バリデーションのチェックをしている」と説明できるのであれば、セキュリティリスクは下げられます。何も知らなかったときよりも、一歩進んだ知識を持っていることになります。
セキュリティをどう学ぶか
セキュリティは非常に奥深い分野です。調べれば調べるほど、XSS・CSRF・CSP、キャッシュやCookieの話、認証、RLSなど、さまざまな脆弱性が出てきます。一気に学ぼうとすると理解しづらいので、開発を進めながらAIと壁打ちして理解を深めたり、専門書で学んだりするのがおすすめです。
「安全なWebアプリケーションの作り方」といった有名な書籍(いわゆる徳丸本)で知識を蓄えていくと、安全にリリースできるようになります。セキュリティの本はPHPなど古い言語で解説しているものが多く、ReactやNext.jsのようなモダンな技術でセキュリティを扱った本はあまりありません。ただ、従来の言語でセキュアなアプリケーションの作り方を学べば、その考え方は現代の技術にも応用できます。学んでおいて損はありません。
徳丸本は分厚いですが、XSSやセッションハイジャック、エスケープ処理の話に加え、実際のHTTPリクエストとレスポンスの中身を見ながら脆弱性について学べるため、おすすめです。
次の動画からは、実際に脆弱性のあるアプリを作り、ハッキング的なことを試していきます。