Impact
Eșecul implementării Securității la nivel de rând (RLS) permite atacatorilor neautentificați să interogheze date dintr-o bază de date Supabase atunci când tabelele publice sunt expuse prin limita anon [S1]. Deoarece aplicațiile Next.js expun de obicei cheia Supabase anon în codul clientului, un atacator poate folosi această cheie pentru a face REST direct [S2].
Cauza fundamentală
În mod implicit, tabelele Postgres din Supabase necesită activarea explicită a Securității la nivel de rând pentru a preveni accesul public [S1]. Când un dezvoltator creează un tabel, dar uită să activeze RLS sau nu reușește să definească politici restrictive, baza de date poate expune date oricui deține cheia anon [S1] a proiectului. În aplicațiile Next.js, randarea pe server și preluarea pe partea client necesită, de asemenea, o configurare atentă a clientului Supabase, astfel încât contextul utilizatorului autentificat să ajungă la nivelul bazei de date [S2].
Remedieri concrete
- Activați RLS: Executați
ALTER TABLE "your_table_name" ENABLE ROW LEVEL SECURITY;pentru fiecare tabel public care stochează datele aplicației [S1]. - Definiți politici: Creați politici specifice care restricționează accesul pe baza stării de autentificare a utilizatorului, cum ar fi
CREATE POLICY "Users can see their own data" ON your_table_name FOR SELECT USING (auth.uid() = user_id);[S1]. - Clienți securizați pe server: Când utilizați Next.js, păstrați clienții cu rol de serviciu doar pentru server și aplicați în continuare filtre de proprietate înainte de a returna datele utilizatorilor [S2].
Cum testează FixVibe pentru aceasta
FixVibe rulează deja o verificare numai în citire Supabase RLS prin baas.supabase-rls. Scanerul descoperă adresa URL a proiectului Supabase și cheia publică anonimă din pachetele JavaScript de aceeași origine, solicită PostgREST metadatele publice ale tabelului și încearcă selecții limitate doar pentru citire pentru a confirma dacă datele sunt expuse fără o sesiune de utilizator. Nu inserează, actualizează, șterge și nu utilizează acreditările pentru rol de serviciu. Scanările repo pot surprinde acest lucru mai devreme prin repo.supabase.missing-rls, care semnalează migrațiile SQL care creează tabele publice fără ENABLE ROW LEVEL SECURITY.
