Epekto
Ang pagkabigong ipatupad ang Row Level Security (RLS) ay nagbibigay-daan sa mga hindi na-authenticate na attacker na mag-query ng data mula sa isang Supabase database kapag ang mga pampublikong talahanayan ay nalantad sa pamamagitan ng anon na hangganan na [S1]. Dahil karaniwang inilalantad ng mga Next.js na application ang Supabase anon key sa client-side code, maaaring gamitin ng attacker ang key na ito para direktang REST API sa pamamagitan ng pag-access ng impormasyon sa nilalayong database, pag-log in ng application [S2].
Root Cause
Bilang default, ang mga talahanayan ng Postgres sa Supabase ay nangangailangan ng tahasang pag-activate ng Row Level Security upang maiwasan ang pampublikong access [S1]. Kapag ang isang developer ay lumikha ng isang talahanayan ngunit nakalimutang i-enable ang RLS o nabigong tukuyin ang mga paghihigpit na patakaran, ang database ay maaaring maglantad ng data sa sinumang nagtataglay ng anon key ng proyekto na [S1]. Sa Next.js application, ang server-side rendering at client-side fetching ay nangangailangan din ng maingat na Supabase na pag-setup ng client upang maabot ng na-authenticate na konteksto ng user ang database layer na [S2].
Mga Konkretong Pag-aayos
- I-enable ang RLS: Ipatupad ang
ALTER TABLE "your_table_name" ENABLE ROW LEVEL SECURITY;para sa bawat pampublikong talahanayan na nag-iimbak ng data ng app [S1]. - Tukuyin ang Mga Patakaran: Lumikha ng mga partikular na patakaran na naghihigpit sa pag-access batay sa katayuan ng pagpapatunay ng user, gaya ng
CREATE POLICY "Users can see their own data" ON your_table_name FOR SELECT USING (auth.uid() = user_id);[S1]. - Mga Secure na Server-Side Client: Kapag gumagamit ng Next.js, panatilihing server-only ang mga service-role client at ilapat pa rin ang mga filter ng pagmamay-ari bago ibalik ang data sa mga user na [S2].
Paano sinusuri ito ng FixVibe
Ang FixVibe ay nagpapatakbo na ng read-only na Supabase RLS check sa pamamagitan ng baas.supabase-rls. Natuklasan ng scanner ang URL ng proyekto ng Supabase at pampublikong anon key mula sa mga bundle ng JavaScript na pareho ang pinagmulan, humihingi sa PostgREST para sa metadata ng pampublikong talahanayan, at sumusubok sa limitadong read-only na mga pagpili upang kumpirmahin kung ang data ay nakalantad nang walang session ng user. Hindi ito naglalagay, nag-a-update, nagtatanggal, o gumagamit ng mga kredensyal sa tungkulin ng serbisyo. Maaari din itong makuha ng mga Repo scan nang mas maaga sa pamamagitan ng repo.supabase.missing-rls, na nagba-flag ng mga paglilipat ng SQL na gumagawa ng mga pampublikong talahanayan nang walang ENABLE ROW LEVEL SECURITY.
