Vaikutus
Jos rivitason suojausta (RLS) ei toteuteta, todentamattomat hyökkääjät voivat tehdä kyselyjä Supabase-tietokannasta, kun julkiset taulukot paljastuvat anon-rajan [S1] kautta. Koska Next.js-sovellukset tyypillisesti paljastavat Supabase anon-avaimen asiakaspuolen koodissa, hyökkääjä voi käyttää tätä avainta tehdäkseen suoria REST API-toimintoja, ohjaamalla käyttäjän arkaluontoisia tietokannan kutsuja ja sovelluskutsuja. [S2].
Perussyy
Oletuksena Supabase:n Postgres-taulukot vaativat nimenomaisen rivitason suojauksen aktivoinnin estääkseen julkisen pääsyn [S1]. Kun kehittäjä luo taulukon, mutta unohtaa ottaa käyttöön RLS tai ei määrittele rajoittavia käytäntöjä, tietokanta voi paljastaa tietoja kenelle tahansa, jolla on projektin anon-avain [S1]. Next.js-sovelluksissa palvelinpuolen renderöinti ja asiakaspuolen haku edellyttävät myös huolellista Supabase-asiakasasetusta, jotta todennettu käyttäjäkonteksti saavuttaa tietokantakerroksen [S2].
Betonikorjauksia
- Ota käyttöön RLS: Suorita
ALTER TABLE "your_table_name" ENABLE ROW LEVEL SECURITY;jokaiselle julkiselle taulukolle, joka tallentaa sovellustietoja [S1]. - Määritä käytännöt: Luo erityisiä käytäntöjä, jotka rajoittavat pääsyä käyttäjän todennustilan perusteella, kuten
CREATE POLICY "Users can see their own data" ON your_table_name FOR SELECT USING (auth.uid() = user_id);[S1]. - Suojatut palvelinpuolen asiakkaat: Kun käytät tiedostoa Next.js, säilytä palvelurooliasiakkaat vain palvelimena ja käytä silti omistajuussuodattimia ennen tietojen palauttamista käyttäjille [S2].
Kuinka FixVibe testaa sitä
FixVibe suorittaa jo vain luku -muotoisen Supabase RLS-tarkistuksen kautta baas.supabase-rls. Skanneri löytää Supabase-projektin URL-osoitteen ja julkisen anon-avaimen samaa alkuperää olevista JavaScript-nipuista, pyytää PostgrESTiltä julkisia taulukon metatietoja ja yrittää rajoitettuja vain luku -valintoja varmistaakseen, paljastetaanko tietoja ilman käyttäjäistuntoa. Se ei lisää, päivitä, poista tai käytä palveluroolin tunnistetietoja. Repo-tarkistukset voivat havaita tämän myös aikaisemmin repo.supabase.missing-rls:n avulla, joka merkitsee SQL-siirrot, jotka luovat julkisia taulukoita ilman ENABLE ROW LEVEL SECURITY:tä.
