Vpliv
Neizvedba varnosti na ravni vrstice (RLS) omogoča neoverjenim napadalcem, da poizvedujejo po podatkih iz zbirke podatkov Supabase, ko so javne tabele izpostavljene prek nenavadne meje [S1]. Ker aplikacije Next.js običajno razkrijejo ključ Supabase anon v kodi na strani odjemalca, lahko napadalec uporabi ta ključ za neposredne klice REST API v bazo podatkov, mimo predvidene logike aplikacije in dostopa do občutljivih uporabniških informacij. [S2].
Temeljni vzrok
Tabele Postgres v Supabase privzeto zahtevajo eksplicitno aktiviranje varnosti na ravni vrstice, da se prepreči javni dostop [S1]. Ko razvijalec ustvari tabelo, vendar pozabi omogočiti RLS ali ne uspe definirati omejevalnih pravilnikov, lahko baza podatkov razkrije podatke vsem, ki imajo projektni ključ anon [S1]. V aplikacijah Next.js upodabljanje na strani strežnika in pridobivanje na strani odjemalca prav tako zahtevata skrbno nastavitev odjemalca Supabase, tako da kontekst preverjenega uporabnika doseže sloj baze podatkov [S2].
Betonski popravki
- Omogoči RLS: Izvedite
ALTER TABLE "your_table_name" ENABLE ROW LEVEL SECURITY;za vsako javno tabelo, ki shranjuje podatke aplikacije [S1]. - Določite pravilnike: Ustvarite posebne pravilnike, ki omejujejo dostop na podlagi statusa preverjanja pristnosti uporabnika, kot je
CREATE POLICY "Users can see their own data" ON your_table_name FOR SELECT USING (auth.uid() = user_id);[S1]. - Zaščite odjemalce na strani strežnika: Ko uporabljate Next.js, naj bodo odjemalci storitvene vloge samo strežniki in še vedno uporabite filtre lastništva, preden vrnete podatke uporabnikom [S2].
Kako ga FixVibe testira
FixVibe že izvaja preverjanje Supabase RLS samo za branje prek baas.supabase-rls. Optični bralnik odkrije URL projekta Supabase in javni anon ključ iz svežnjev JavaScript istega izvora, vpraša PostgREST za metapodatke javne tabele in poskusi z omejeno izbiro samo za branje, da potrdi, ali so podatki izpostavljeni brez uporabniške seje. Ne vstavlja, posodablja, briše ali uporablja poverilnic storitvene vloge. Repo pregledi lahko to tudi prej ujamejo prek repo.supabase.missing-rls, ki označi selitve SQL, ki ustvarjajo javne tabele brez ENABLE ROW LEVEL SECURITY.
