Indvirkning
Manglende implementering af Row Level Security (RLS) tillader uautoriserede angribere at forespørge data fra en Supabase-database, når offentlige tabeller eksponeres gennem den anon-grænse [S1]. Fordi Next.js-applikationer typisk eksponerer Supabase anon-nøglen i kode på klientsiden, kan en angriber bruge denne nøgle til at foretage direkte REST API-kald til databasen og omgå den tilsigtede applikationsfølsomme brugerinformation [S2].
Grundårsag
Som standard kræver Postgres-tabeller i Supabase eksplicit aktivering af Row Level Security for at forhindre offentlig adgang [S1]. Når en udvikler opretter en tabel, men glemmer at aktivere RLS eller undlader at definere restriktive politikker, kan databasen udsætte data for alle, der besidder projektets anon-nøgle [S1]. I Next.js-applikationer kræver server-side-rendering og klient-side-hentning også omhyggelig Supabase-klientopsætning, så autentificeret brugerkontekst når databaselaget [S2].
Konkrete rettelser
- Aktiver RLS: Udfør
ALTER TABLE "your_table_name" ENABLE ROW LEVEL SECURITY;for hver offentlig tabel, der gemmer appdata [S1]. - Definer politikker: Opret specifikke politikker, der begrænser adgang baseret på brugerens godkendelsesstatus, såsom
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 bruger Next.js, skal du beholde servicerolleklienter kun på serveren og stadig anvende ejerskabsfiltre, før du returnerer data til brugerne [S2].
Hvordan FixVibe tester for det
FixVibe kører allerede et skrivebeskyttet Supabase RLS-tjek gennem baas.supabase-rls. Scanneren opdager Supabase-projektets URL og offentlig anon-nøgle fra JavaScript-bundter med samme oprindelse, beder PostgREST om offentlige tabelmetadata og forsøger begrænsede skrivebeskyttede valg for at bekræfte, om data er eksponeret uden en brugersession. Den indsætter, opdaterer, sletter eller bruger ikke servicerolleoplysninger. Repo-scanninger kan også fange dette tidligere gennem repo.supabase.missing-rls, som markerer SQL-migreringer, der opretter offentlige tabeller uden ENABLE ROW LEVEL SECURITY.
