FixVibe
Covered by FixVibehigh

Beveiligen van Next.js + Supabase: Voorkomen van beveiliging op rijniveau (RLS)

Applicaties die zijn gebouwd met Next.js en Supabase vertrouwen vaak op Row Level Security (RLS) om gegevens te beschermen. Het niet inschakelen van RLS of het verkeerd configureren van de Supabase-client kan leiden tot volledige database-blootstelling, waardoor ongeautoriseerde gebruikers gevoelige records kunnen lezen of wijzigen.

CWE-284

Impact

Aanvallers kunnen de applicatielogica omzeilen om records in de database te lezen, bij te werken of te verwijderen als Row Level Security (RLS) niet correct wordt afgedwongen [S1]. Dit resulteert vaak in het blootstellen van persoonlijk identificeerbare informatie (PII) of gevoelige applicatiegegevens aan gebruikers die alleen toegang hebben tot de openbare anonieme API-sleutel.

Oorzaak

Supabase gebruikt Postgres Row Level Security om gegevenstoegang op databaseniveau te beheren, wat van fundamenteel belang is voor het beveiligen van gegevens [S1]. In een Next.js-omgeving moeten ontwikkelaars een Supabase-client maken die cookies en sessies correct verwerkt om de veiligheid te behouden tijdens server-side rendering [S2]. Kwetsbaarheden ontstaan doorgaans wanneer:

  • Tabellen worden gemaakt zonder dat RLS is ingeschakeld, waardoor ze toegankelijk zijn via de openbare anon-sleutel [S1].
  • De Supabase-client is verkeerd geconfigureerd in Next.js, waardoor gebruikersauthenticatietokens niet correct worden doorgegeven aan de database [S2].
  • Ontwikkelaars gebruiken per ongeluk de sleutel service_role in code aan de clientzijde, waardoor alle RLS-beleidsregels [S1] worden omzeild.

Betonreparaties

  • RLS inschakelen: Zorg ervoor dat beveiliging op rijniveau is ingeschakeld voor elke tabel in uw Supabase-database [S1].
  • Beleid definiëren: Maak specifiek Postgres-beleid voor SELECT, INSERT, UPDATE en DELETE-bewerkingen om de toegang te beperken op basis van de UID [S1] van de gebruiker.
  • Gebruik SSR-clients: Implementeer het @supabase/ssr-pakket om clients te maken in Next.js die server-side authenticatie en sessiepersistentie [S2] correct beheren.

Hoe FixVibe erop test

FixVibe dekt dit al via geïmplementeerde app- en repo-controles. De passieve baas.supabase-rls-module ontdekt de Supabase-URL en anon-sleutelparen uit JavaScript-bundels van dezelfde oorsprong, vraagt ​​PostgREST om metagegevens van openbare tabellen en voert beperkte alleen-lezen-selecties uit om anonieme gegevensblootstelling te bevestigen zonder klantgegevens te muteren. Repo-scans voeren ook repo.supabase.missing-rls uit om SQL-migraties te markeren die openbare tabellen maken zonder ENABLE ROW LEVEL SECURITY, en geheime scans zoeken naar blootstelling aan servicerolsleutels voordat deze de browser bereiken.