FixVibe
Covered by FixVibehigh

Zaštita Next.js + Supabase: Sprječavanje zaobilaženja sigurnosti na razini retka (RLS)

Aplikacije izgrađene pomoću Next.js i Supabase često se oslanjaju na sigurnost na razini retka (RLS) za zaštitu podataka. Nemogućnost RLS ili pogrešna konfiguracija Supabase klijenta može dovesti do potpune izloženosti baze podataka, dopuštajući neovlaštenim korisnicima da čitaju ili mijenjaju osjetljive zapise.

CWE-284

Utjecaj

Napadači mogu zaobići logiku aplikacije za čitanje, ažuriranje ili brisanje zapisa u bazi podataka ako sigurnost na razini retka (RLS) nije pravilno nametnuta [S1]. To često rezultira izlaganjem osobnih podataka (PII) ili osjetljivih podataka aplikacije korisnicima koji imaju pristup samo javnom anonimnom ključu API.

Glavni uzrok

Supabase koristi Postgres Row Level Security za upravljanje pristupom podacima na razini baze podataka, što je temeljno za osiguranje podataka [S1]. U Next.js okruženju, programeri moraju kreirati Supabase klijenta koji ispravno rukuje kolačićima i sesijama radi održavanja sigurnosti tijekom prikazivanja [S2] na strani poslužitelja. Ranjivosti obično nastaju kada:

  • Tablice se stvaraju bez omogućenog RLS, što ih čini dostupnima putem javnog anonimnog ključa [S1].
  • Supabase klijent je pogrešno konfiguriran u Next.js, ne uspijeva pravilno proslijediti korisničke tokene za provjeru autentičnosti bazi podataka [S2].
  • Programeri slučajno koriste ključ service_role u kodu na strani klijenta, koji zaobilazi sva pravila RLS [S1].

Konkretni popravci

  • Omogući RLS: Osigurajte da je sigurnost na razini retka omogućena za svaku tablicu u vašoj Supabase bazi podataka [S1].
  • Definirajte pravila: Stvorite posebna Postgres pravila za operacije SELECT, INSERT, UPDATE i DELETE za ograničavanje pristupa na temelju korisničkog UID-a [S1].
  • Koristite SSR klijente: Implementirajte paket @supabase/ssr za stvaranje klijenata u Next.js koji ispravno upravljaju autentifikacijom na strani poslužitelja i postojanošću sesije [S2].

Kako FixVibe to testira

FixVibe to već pokriva kroz provjere implementirane aplikacije i repoa. Pasivni modul baas.supabase-rls otkriva Supabase parove URL-a i anon-ključa iz JavaScript paketa istog podrijetla, traži od PostgREST-a metapodatke javne tablice i izvodi ograničene odabire samo za čitanje kako bi potvrdio izloženost anonimnih podataka bez mutiranja korisničkih podataka. Repo skeniranja također pokreću repo.supabase.missing-rls za označavanje SQL migracija koje stvaraju javne tablice bez ENABLE ROW LEVEL SECURITY, a tajna skeniranja traže izloženost ključa uloge usluge prije nego što dospije u preglednik.