Virkning
Unnlatelse av å implementere Row Level Security (RLS) tillater uautentiserte angripere å spørre etter data fra en Supabase-database når offentlige tabeller blir eksponert gjennom den anoniserte grensen [S1]. Fordi Next.js-applikasjoner vanligvis eksponerer Supabase anon-nøkkelen i kode på klientsiden, kan en angriper bruke denne nøkkelen til å foreta direkte REST API-anrop til databasen, og omgå den tiltenkte applikasjonssensitive brukerinformasjonen [S2].
Grunnårsak
Som standard krever Postgres-tabeller i Supabase eksplisitt aktivering av Row Level Security for å forhindre offentlig tilgang [S1]. Når en utvikler oppretter en tabell, men glemmer å aktivere RLS eller ikke klarer å definere restriktive retningslinjer, kan databasen eksponere data for alle som har prosjektets anon-nøkkel [S1]. I Next.js-applikasjoner krever gjengivelse på serversiden og henting på klientsiden også nøye Supabase-klientoppsett slik at autentisert brukerkontekst når databaselaget [S2].
Betongrettinger
- Aktiver RLS: Kjør
ALTER TABLE "your_table_name" ENABLE ROW LEVEL SECURITY;for hver offentlige tabell som lagrer appdata [S1]. - Definer retningslinjer: Lag spesifikke retningslinjer som begrenser tilgang basert på brukerens autentiseringsstatus, for eksempel
CREATE POLICY "Users can see their own data" ON your_table_name FOR SELECT USING (auth.uid() = user_id);[S1]. - Sikre klienter på serversiden: Når du bruker Next.js, behold tjenesterolleklienter kun på server og fortsatt bruk eierskapsfiltre før du returnerer data til brukere [S2].
Hvordan FixVibe tester for det
FixVibe kjører allerede en skrivebeskyttet Supabase RLS-sjekk gjennom baas.supabase-rls. Skanneren oppdager Supabase-prosjektets URL og offentlig anonnøkkel fra JavaScript-bunter med samme opprinnelse, ber PostgREST om offentlige tabellmetadata, og forsøker begrensede skrivebeskyttede valg for å bekrefte om data er eksponert uten en brukerøkt. Den setter ikke inn, oppdaterer, sletter eller bruker påloggingsinformasjon for tjenesterolle. Repo-skanninger kan også fange dette tidligere gjennom repo.supabase.missing-rls, som flagger SQL-migreringer som lager offentlige tabeller uten ENABLE ROW LEVEL SECURITY.
