FixVibe
Covered by FixVibehigh

Osiguravanje Next.js + Supabase: Sprečavanje zaobilaženja sigurnosti na nivou reda (RLS)

Aplikacije izgrađene sa Next.js i Supabase često se oslanjaju na sigurnost na nivou reda (RLS) za zaštitu podataka. Neuspješno omogućavanje RLS ili pogrešno konfiguriranje Supabase klijenta može dovesti do potpunog izlaganja baze podataka, omogućavajući neovlaštenim korisnicima da čitaju ili modificiraju osjetljive zapise.

CWE-284

Impact

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

Osnovni uzrok

Supabase koristi Postgres Row Level Security za upravljanje pristupom podacima na nivou baze podataka, što je fundamentalno za osiguranje podataka [S1]. U okruženju Next.js, programeri moraju kreirati Supabase klijenta koji ispravno rukuje kolačićima i sesijama kako bi održao sigurnost tokom prikazivanja [S2] na strani servera. Ranjivosti obično nastaju kada:

  • Tabele se kreiraju bez omogućenog RLS, što im čini dostupnima putem javnog anonimnog ključa [S1].
  • Supabase klijent je pogrešno konfiguriran u Next.js, ne uspijeva pravilno proslijediti tokene za provjeru autentičnosti korisnika u bazu podataka [S2].
  • Programeri slučajno koriste service_role ključ u kodu na strani klijenta, koji zaobilazi sve RLS politike [S1].

Betonski popravci

  • Omogući RLS: Osigurajte da je sigurnost na razini reda omogućena za svaku tablicu u vašoj Supabase bazi podataka [S1].
  • Definirajte politike: Kreirajte specifične Postgres politike za SELECT, INSERT, UPDATE i DELETE operacije za ograničavanje pristupa korisnika na osnovu UID-a [S1].
  • Koristite SSR klijente: Implementirajte paket @supabase/ssr da kreirate klijente u Next.js koji ispravno upravljaju autentifikacijom na strani servera i postojanošću sesije [S2].

Kako FixVibe testira za to

FixVibe to već pokriva kroz provjere implementirane aplikacije i repo. Pasivni baas.supabase-rls modul otkriva Supabase URL i parove bez ključeva iz JavaScript paketa istog porijekla, traži od PostgREST-a metapodatke javne tablice i vrši ograničene odabire samo za čitanje kako bi potvrdio izloženost anonimnim podacima korisnika bez mutiranja podataka. Repo skeniranja također pokreću repo.supabase.missing-rls za označavanje SQL migracija koje kreiraju javne tabele bez ENABLE ROW LEVEL SECURITY, a tajna skeniranja traže izlaganje ključa uslužne uloge prije nego što stigne u pretraživač.