FixVibe
Covered by FixVibehigh

Säkra Next.js + Supabase: Förhindrar förbikopplingar av radnivåsäkerhet (RLS)

Applikationer byggda med Next.js och Supabase förlitar sig ofta på Row Level Security (RLS) för att skydda data. Underlåtenhet att aktivera RLS eller felkonfigurering av Supabase-klienten kan leda till fullständig databasexponering, vilket tillåter obehöriga användare att läsa eller ändra känsliga poster.

CWE-284

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, UPDATE och DELETE-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.