Inverkan
Angripare kan kringgå programlogik för att läsa, uppdatera eller ta bort poster i databasen om Row Level Security (RLS) inte tillämpas korrekt [S1]. Detta resulterar ofta i exponering av personligt identifierbar information (PII) eller känslig applikationsdata för användare som bara har tillgång till den offentliga anonyma API-nyckeln.
Rotorsak
Supabase använder Postgres Row Level Security för att hantera dataåtkomst på databasnivå, vilket är grundläggande för att säkra data [S1]. I en Next.js-miljö måste utvecklare skapa en Supabase-klient som korrekt hanterar cookies och sessioner för att upprätthålla säkerheten under serversidans rendering av [S2]. Sårbarheter uppstår vanligtvis när:
- Tabeller skapas utan att RLS är aktiverat, vilket gör dem tillgängliga via den offentliga anonnyckeln [S1].
- Supabase-klienten är felkonfigurerad i Next.js och misslyckas med att skicka användarautentiseringstoken till databasen [S2].
- Utvecklare använder av misstag
service_role-nyckeln i kod på klientsidan, vilket kringgår alla RLS-policyer [S1].
Betongfixar
- Aktivera RLS: Se till att Row Level Security är aktiverat för varje tabell i din Supabase-databas [S1].
- Definiera policyer: Skapa specifika Postgres-policyer för
SELECT,INSERT,UPDATEochDELETE-operationer för att begränsa åtkomsten baserat på användarens UID ZXCVIXBETOKEN. - Använd SSR-klienter: Implementera
@supabase/ssr-paketet för att skapa klienter i Next.js som korrekt hanterar autentisering på serversidan och sessionsbeständighet [S2].
Hur FixVibe testar det
FixVibe täcker redan detta genom utplacerade appar och repokontroller. Den passiva baas.supabase-rls-modulen upptäcker Supabase URL- och anon-nyckelpar från JavaScript-paket med samma ursprung, ber PostgREST om offentlig tabellmetadata och utför begränsade skrivskyddade val för att bekräfta anonym dataexponering utan att mutera kunddata. Repo-skanningar kör också repo.supabase.missing-rls för att flagga SQL-migreringar som skapar offentliga tabeller utan ENABLE ROW LEVEL SECURITY, och hemliga skanningar letar efter exponering av tjänstrollnyckel innan den når webbläsaren.
