Влијание
Неуспехот да се имплементира безбедност на ниво на ред (RLS) им овозможува на неавтентицираните напаѓачи да бараат податоци од базата на податоци Supabase кога јавните табели се изложени преку анонската граница [S1]. Бидејќи Next.js апликациите вообичаено го изложуваат клучот Supabase anon во кодот од клиентската страна, напаѓачот може да го користи овој клуч за да направи директни REST API повици за наменети REST API со тоа што ќе пристапи до корисничките повици наменети за базата на податоци. [S2].
Основна причина
Стандардно, табелите Postgres во Supabase бараат експлицитно активирање на безбедност на ниво на ред за да се спречи јавен пристап [S1]. Кога развивачот креира табела, но заборави да овозможи RLS или не успее да дефинира рестриктивни политики, базата на податоци може да ги изложи податоците на секој што го поседува клучот anon на проектот [S1]. Во апликациите Next.js, рендерирањето од страна на серверот и преземањето од страна на клиентот, исто така, бараат внимателно поставување на клиентот Supabase, така што автентицираниот кориснички контекст ќе го достигне слојот на базата на податоци [S2].
Бетонски поправки
- Овозможете RLS: Извршете го
ALTER TABLE "your_table_name" ENABLE ROW LEVEL SECURITY;за секоја јавна табела што складира податоци за апликациите [S1]. - Дефинирајте политики: Креирајте специфични политики кои го ограничуваат пристапот врз основа на статусот за автентикација на корисникот, како што е
CREATE POLICY "Users can see their own data" ON your_table_name FOR SELECT USING (auth.uid() = user_id);[S1]. - Безбедни клиенти од страна на серверот: Кога користите Next.js, чувајте ги клиентите за услужна улога само на серверот и сè уште применувајте филтри за сопственост пред да ги вратите податоците на корисниците [S2].
Како FixVibe тестира за него
FixVibe веќе извршува Supabase RLS само за читање преку baas.supabase-rls. Скенерот ја открива URL-адресата на проектот Supabase и јавниот anon клуч од пакетите JavaScript од исто потекло, бара од PostgREST за јавни метаподатоци од табелата и се обидува со ограничено избирање само за читање да потврди дали податоците се изложени без корисничка сесија. Не вметнува, ажурира, брише или користи акредитиви за услужна улога. Скенирањето на репо може и порано да го фатат ова преку repo.supabase.missing-rls, што ги означува миграциите на SQL што создаваат јавни табели без ENABLE ROW LEVEL SECURITY.
