Kesan
Kegagalan untuk melaksanakan Keselamatan Tahap Baris (RLS) membenarkan penyerang yang tidak disahkan menanyakan data daripada pangkalan data Supabase apabila jadual awam didedahkan melalui sempadan anon [S1]. Oleh kerana aplikasi Next.js lazimnya mendedahkan kunci Supabase anon dalam kod sisi klien, penyerang boleh menggunakan kunci ini untuk membuat REST terus API melalui panggilan dan akses kepada pangkalan data, maklumat sensitif pengguna yang dimaksudkan. [S2].
Punca Punca
Secara lalai, jadual Postgres dalam Supabase memerlukan pengaktifan eksplisit Row Level Security untuk menghalang akses awam [S1]. Apabila pembangun mencipta jadual tetapi terlupa untuk mendayakan RLS atau gagal mentakrifkan dasar sekatan, pangkalan data mungkin mendedahkan data kepada sesiapa sahaja yang memiliki kunci anon projek [S1]. Dalam aplikasi Next.js, pemaparan sebelah pelayan dan pengambilan sebelah pelanggan juga memerlukan persediaan pelanggan Supabase yang teliti supaya konteks pengguna yang disahkan mencapai lapisan pangkalan data [S2].
Pembetulan Konkrit
- Dayakan RLS: Laksanakan
ALTER TABLE "your_table_name" ENABLE ROW LEVEL SECURITY;untuk setiap jadual awam yang menyimpan data apl [S1]. - Tentukan Dasar: Buat dasar khusus yang menyekat akses berdasarkan status pengesahan pengguna, seperti
CREATE POLICY "Users can see their own data" ON your_table_name FOR SELECT USING (auth.uid() = user_id);[S1]. - Klien Sebelah Pelayan Selamat: Apabila menggunakan Next.js, kekalkan pelayan peranan pelanggan perkhidmatan sahaja dan masih menggunakan penapis pemilikan sebelum mengembalikan data kepada pengguna [S2].
Bagaimana FixVibe mengujinya
FixVibe sudah menjalankan semakan Supabase RLS baca sahaja melalui baas.supabase-rls. Pengimbas menemui URL projek Supabase dan kunci anon awam daripada berkas JavaScript asal yang sama, meminta PostgREST untuk metadata jadual awam dan cuba memilih baca sahaja terhad untuk mengesahkan sama ada data didedahkan tanpa sesi pengguna. Ia tidak memasukkan, mengemas kini, memadam atau menggunakan kelayakan peranan perkhidmatan. Imbasan Repo juga boleh menangkap ini lebih awal melalui repo.supabase.missing-rls, yang membenderakan migrasi SQL yang mencipta jadual awam tanpa ENABLE ROW LEVEL SECURITY.
