FixVibe
Covered by FixVibehigh

Securizarea Next.js + Supabase: Prevenirea securității la nivel de rând (RLS)

Aplicațiile create cu Next.js și Supabase se bazează adesea pe Row Level Security (RLS) pentru a proteja datele. Neactivarea RLS sau configurarea greșită a clientului Supabase poate duce la expunerea completă a bazei de date, permițând utilizatorilor neautorizați să citească sau să modifice înregistrările sensibile.

CWE-284

Impact

Atacatorii pot ocoli logica aplicației pentru a citi, actualiza sau șterge înregistrările din baza de date dacă securitatea la nivel de rând (RLS) nu este aplicată corect [S1]. Acest lucru duce adesea la expunerea informațiilor de identificare personală (PII) sau a datelor sensibile ale aplicațiilor către utilizatorii care au acces doar la cheia publică anonimă API.

Cauza fundamentală

Supabase utilizează Postgres Row Level Security pentru a gestiona accesul la date la nivel de bază de date, care este fundamental pentru securizarea datelor [S1]. Într-un mediu Next.js, dezvoltatorii trebuie să creeze un client Supabase care gestionează corect cookie-urile și sesiunile pentru a menține securitatea în timpul redării pe server [S2]. Vulnerabilitățile apar de obicei atunci când:

  • Tabelele sunt create fără RLS activat, făcându-le accesibile prin cheia publică anonimă [S1].
  • Clientul Supabase este configurat greșit în Next.js, nereușind să transmită corect jetoanele de autentificare a utilizatorului în baza de date [S2].
  • Dezvoltatorii folosesc accidental cheia service_role în codul clientului, care ocolește toate politicile RLS [S1].

Remedieri concrete

  • Activați RLS: Asigurați-vă că securitatea la nivel de rând este activată pentru fiecare tabel din baza de date Supabase [S1].
  • Definiți politici: Creați politici Postgres specifice pentru operațiunile SELECT, INSERT, UPDATE și DELETE pentru a restricționa accesul pe baza utilizatorului UPDATE4
  • Utilizați clienți SSR: Implementați pachetul @supabase/ssr pentru a crea clienți în Next.js care gestionează corect autentificarea pe server și persistența sesiunii [S2].

Cum testează FixVibe pentru aceasta

FixVibe acoperă deja acest lucru prin verificări ale aplicației implementate și repo. Modulul pasiv baas.supabase-rls descoperă URL-ul Supabase și perechile de chei anonime din pachetele JavaScript de aceeași origine, solicită PostgREST metadatele publice ale tabelului și efectuează selecții limitate doar pentru citire pentru a confirma expunerea datelor anonime fără a modifica datele clienților. Scanările repo rulează, de asemenea, repo.supabase.missing-rls pentru a semnala migrațiile SQL care creează tabele publice fără ENABLE ROW LEVEL SECURITY, iar scanările secrete caută expunerea cheii rolului de serviciu înainte de a ajunge în browser.