Mõju
Reataseme turvalisuse (RLS) rakendamata jätmine võimaldab autentimata ründajatel teha päringuid andmebaasist Supabase, kui avalikud tabelid on avatud anoonipiiri [S1] kaudu. Kuna rakendused Next.js avaldavad kliendipoolses koodis tavaliselt võtme Supabase anon, saab ründaja seda võtit kasutada otse REST API tegemiseks, kasutajate tundliku juurdepääsu kaudu andmebaasi logimisandmetele ja rakenduste jaoks. [S2].
Algpõhjus
Vaikimisi nõuavad Postgresi tabelid failis Supabase reataseme turvalisuse selgesõnalist aktiveerimist, et takistada avalikku juurdepääsu [S1]. Kui arendaja loob tabeli, kuid unustab lubada RLS või ei suuda määratleda piiravaid eeskirju, võib andmebaas avaldada andmeid kõigile, kellel on projekti võti anon [S1]. Next.js rakendustes nõuavad serveripoolne renderdus ja kliendipoolne toomine ka Supabase kliendi hoolikat seadistamist, et autentitud kasutajakontekst jõuaks andmebaasikihini [S2].
Betooniparandused
- Lubage RLS: Käivitage
ALTER TABLE "your_table_name" ENABLE ROW LEVEL SECURITY;iga avaliku tabeli jaoks, mis salvestab rakenduse andmeid [S1]. - Määrake poliitikad: looge konkreetsed eeskirjad, mis piiravad juurdepääsu kasutaja autentimisoleku põhjal, nt
CREATE POLICY "Users can see their own data" ON your_table_name FOR SELECT USING (auth.uid() = user_id);[S1]. - Turvalised serveripoolsed kliendid: kui kasutate Next.js-d, hoidke teenindusrolliga kliendid ainult serverina ja rakendage siiski omandilise kuuluvuse filtreid enne andmete tagastamist kasutajatele [S2].
Kuidas FixVibe seda testib
FixVibe juba käitab kirjutuskaitstud Supabase RLS kontrolli läbi baas.supabase-rls. Skanner tuvastab sama päritoluga JavaScripti kimpudest projekti Supabase URL-i ja avaliku anonvõtme, küsib PostgrRESTilt avalike tabelite metaandmeid ja proovib piiratud kirjutuskaitstud valikuid, et kinnitada, kas andmeid avaldatakse ilma kasutajaseansita. See ei sisesta, värskenda, kustuta ega kasuta teenuserolli mandaate. Repo-skannid võivad selle tuvastada ka varem läbi repo.supabase.missing-rls, mis märgib SQL-i migratsioonid, mis loovad avalikke tabeleid ilma ENABLE ROW LEVEL SECURITY-ta.
