Poveikis
Nepavykus įdiegti eilutės lygio saugumo (RLS), neautentifikuoti užpuolikai gali užklausti duomenis iš Supabase duomenų bazės, kai viešosios lentelės yra atskleistos per anon ribą [S1]. Kadangi Next.js programos kliento kode paprastai atskleidžia Supabase anon raktą, užpuolikas gali naudoti šį raktą tiesioginiam REST API naudojimui, naudotojo slaptos informacijos iškvietimui į duomenų bazę. [S2].
Pagrindinė priežastis
Pagal numatytuosius nustatymus Postgres lentelėse Supabase reikia aiškiai suaktyvinti eilutės lygio apsaugą, kad būtų išvengta viešos prieigos [S1]. Kai kūrėjas sukuria lentelę, bet pamiršta įjungti RLS arba neapibrėžia ribojančių strategijų, duomenų bazė gali atskleisti duomenis visiems, turintiems projekto anon raktą [S1]. Next.js programose serverio pusės atvaizdavimas ir kliento pusės gavimas taip pat reikalauja kruopštaus Supabase kliento sąrankos, kad autentifikuotas vartotojo kontekstas pasiektų duomenų bazės sluoksnį [S2].
Betoniniai pataisymai
- Įgalinti RLS: Vykdykite
ALTER TABLE "your_table_name" ENABLE ROW LEVEL SECURITY;kiekvienoje viešoje lentelėje, kurioje saugomi programos duomenys [S1]. - Apibrėžkite politiką: sukurkite konkrečias strategijas, kurios riboja prieigą pagal naudotojo autentifikavimo būseną, pvz.,
CREATE POLICY "Users can see their own data" ON your_table_name FOR SELECT USING (auth.uid() = user_id);[S1]. - Saugūs serverio klientai: kai naudojate Next.js, aptarnaujančius klientus palikite tik serveryje ir vis tiek taikykite nuosavybės filtrus prieš grąžindami duomenis naudotojams [S2].
Kaip FixVibe tai tikrina
FixVibe jau veikia tik skaitomas Supabase RLS patikrinimas per baas.supabase-rls. Skaitytuvas aptinka projekto Supabase URL ir viešąjį anoninį raktą iš tos pačios kilmės „JavaScript“ paketų, prašo „PostgREST“ pateikti viešųjų lentelės metaduomenų ir bando atlikti ribotą tik skaitymo pasirinkimą, kad patvirtintų, ar duomenys rodomi be vartotojo seanso. Jis neįterpia, neatnaujina, neištrina ir nenaudoja aptarnavimo vaidmens kredencialų. Atpirkimo nuskaitymas taip pat gali tai užfiksuoti anksčiau naudojant repo.supabase.missing-rls, kuris pažymi SQL perkėlimą, sukuriantį viešąsias lenteles be ENABLE ROW LEVEL SECURITY.
