Utjecaj
Neuspjeh u implementaciji sigurnosti na razini retka (RLS) dopušta neautoriziranim napadačima da postavljaju upite podacima iz Supabase baze podataka kada su javne tablice izložene kroz anonimnu granicu [S1]. Budući da aplikacije Next.js obično izlažu ključ Supabase anon u kodu na strani klijenta, napadač može koristiti ovaj ključ za izravne pozive REST API bazi podataka, zaobilazeći predviđenu logiku aplikacije i pristupajući osjetljivim korisničkim informacijama [S2].
Glavni uzrok
Prema zadanim postavkama, Postgres tablice u Supabase zahtijevaju izričitu aktivaciju sigurnosti na razini reda kako bi se spriječio javni pristup [S1]. Kada programer kreira tablicu, ali zaboravi omogućiti RLS ili ne uspije definirati restriktivna pravila, baza podataka može izložiti podatke bilo kome tko posjeduje anon ključ projekta [S1]. U Next.js aplikacijama, iscrtavanje na strani poslužitelja i dohvaćanje na strani klijenta također zahtijevaju pažljivo postavljanje Supabase klijenta tako da autentificirani korisnički kontekst dosegne sloj baze podataka [S2].
Konkretni popravci
- Omogući RLS: Izvrši
ALTER TABLE "your_table_name" ENABLE ROW LEVEL SECURITY;za svaku javnu tablicu koja pohranjuje podatke aplikacije [S1]. - Definirajte pravila: Kreirajte posebna pravila koja ograničavaju pristup na temelju statusa provjere autentičnosti korisnika, kao što je
CREATE POLICY "Users can see their own data" ON your_table_name FOR SELECT USING (auth.uid() = user_id);[S1]. - Sigurni klijenti na strani poslužitelja: Kada koristite Next.js, neka klijenti s ulogom usluge budu samo poslužitelji i još uvijek primjenjuju filtre vlasništva prije vraćanja podataka korisnicima [S2].
Kako FixVibe to testira
FixVibe već pokreće provjeru Supabase RLS samo za čitanje kroz baas.supabase-rls. Skener otkriva URL projekta Supabase i javni anonimni ključ iz JavaScript paketa istog podrijetla, traži od PostgREST metapodatke javne tablice i pokušava ograničeno odabrati samo za čitanje kako bi potvrdio jesu li podaci izloženi bez korisničke sesije. Ne umeće, ažurira, briše niti koristi vjerodajnice uloge usluge. Repo skeniranje također može uhvatiti ovo ranije putem repo.supabase.missing-rls, koji označava SQL migracije koje stvaraju javne tablice bez ENABLE ROW LEVEL SECURITY.
