Vplyv
Zlyhanie pri implementácii zabezpečenia na úrovni riadkov (RLS) umožňuje neovereným útočníkom vyhľadávať údaje z databázy Supabase, keď sú verejné tabuľky vystavené cez anon hranicu [S1]. Pretože aplikácie Next.js zvyčajne odhaľujú kľúč Supabase anon v kóde na strane klienta, útočník môže použiť tento kľúč na priame REST API volaniami zamýšľanej aplikácie do logiky prístupu a obísť ich logiku. [S2].
Hlavná príčina
V predvolenom nastavení vyžadujú tabuľky Postgres v Supabase explicitnú aktiváciu zabezpečenia na úrovni riadkov, aby sa zabránilo verejnému prístupu [S1]. Keď vývojár vytvorí tabuľku, ale zabudne povoliť RLS alebo nedokáže definovať reštriktívne politiky, databáza môže sprístupniť údaje komukoľvek, kto vlastní kľúč projektu anon [S1]. V aplikáciách Next.js si vykresľovanie na strane servera a načítanie na strane klienta tiež vyžaduje starostlivé nastavenie klienta Supabase, aby sa kontext overeného používateľa dostal do databázovej vrstvy [S2].
Opravy betónu
- Povoliť RLS: Vykonajte
ALTER TABLE "your_table_name" ENABLE ROW LEVEL SECURITY;pre každú verejnú tabuľku, v ktorej sú uložené údaje aplikácie [S1]. - Definujte politiky: Vytvorte špecifické politiky, ktoré obmedzujú prístup na základe stavu overenia používateľa, ako napríklad
CREATE POLICY "Users can see their own data" ON your_table_name FOR SELECT USING (auth.uid() = user_id);[S1]. - Bezpeční klienti na strane servera: Keď používate Next.js, ponechajte klientov s rolou služby len server a pred vrátením údajov používateľom [S2] stále používajte filtre vlastníctva.
Ako to testuje FixVibe
FixVibe už spúšťa kontrolu Supabase RLS iba na čítanie cez baas.supabase-rls. Skener zistí adresu URL projektu Supabase a verejný anon kľúč zo zväzkov JavaScript rovnakého pôvodu, požiada PostgREST o verejné metadáta tabuľky a pokúsi sa o obmedzené výbery iba na čítanie, aby potvrdil, či sú údaje vystavené bez relácie používateľa. Nevkladá, neaktualizuje, neodstraňuje ani nepoužíva poverenia servisnej role. Repo skeny to dokážu zachytiť aj skôr prostredníctvom repo.supabase.missing-rls, ktorý označí migrácie SQL, ktoré vytvárajú verejné tabuľky bez ENABLE ROW LEVEL SECURITY.
