FixVibe
Covered by FixVibehigh

Обезбедување Next.js + Supabase: Спречување на заобиколување на ниво на ред (RLS)

Апликациите изградени со Next.js и Supabase често се потпираат на безбедност на ниво на ред (RLS) за заштита на податоците. Неуспехот да се овозможи RLS или погрешното конфигурирање на клиентот Supabase може да доведе до целосно изложување на базата на податоци, дозволувајќи им на неовластени корисници да читаат или менуваат чувствителни записи.

CWE-284

Влијание

Напаѓачите можат да ја заобиколат логиката на апликацијата за да читаат, ажурираат или бришат записи во базата на податоци ако безбедноста на ниво на ред (RLS) не е правилно наметната [S1]. Ова често резултира со изложување на информации за лична идентификација (PII) или чувствителни податоци од апликацијата на корисници кои имаат пристап само до јавниот анонимен клуч API.

Основна причина

Supabase користи Postgres Row Level Security за управување со пристапот до податоци на ниво на базата на податоци, што е основно за обезбедување на податоците [S1]. Во околината Next.js, програмерите мора да создадат клиент Supabase кој правилно ракува со колачиња и сесии за да се одржи безбедноста при рендерирање на серверот [S2]. Ранливостите обично се појавуваат кога:

  • Табелите се креирани без овозможено RLS, што ги прави достапни преку јавниот анон клуч [S1].
  • Клиентот Supabase е погрешно конфигуриран во Next.js, не успевајќи правилно да ги предаде токените за автентикација на корисникот во базата на податоци [S2].
  • Програмерите случајно го користат клучот service_role во кодот од клиентската страна, кој ги заобиколува сите RLS политики [S1].

Бетонски поправки

  • Овозможете RLS: Осигурете се дека безбедноста на ниво на ред е овозможена за секоја табела во вашата база на податоци Supabase [S1].
  • Дефинирајте политики: Создадете специфични политики на Postgres за SELECT, INSERT, UPDATE и DELETE за да го ограничите пристапот на операциите на корисникот врз основа на UID [S1].
  • Користете SSR клиенти: Имплементирајте го пакетот @supabase/ssr за да креирате клиенти во Next.js кои правилно управуваат со автентикацијата од страна на серверот и упорноста на сесијата [S2].

Како FixVibe тестира за него

FixVibe веќе го покрива ова преку проверки на распоредени апликации и репо. Пасивниот модул baas.supabase-rls открива Supabase парови на URL-адреса и анонимни клучеви од пакетите JavaScript од исто потекло, бара од PostgREST за јавни метаподатоци од табелата и врши ограничен избор само за читање за да потврди анонимна изложеност на податоци од клиентите без мутирање. Скенирањето на репо, исто така, го извршува repo.supabase.missing-rls за да ги означи миграциите на SQL што создаваат јавни табели без ENABLE ROW LEVEL SECURITY, а тајните скенирања бараат изложеност на клучот за услужна улога пред да стигне до прелистувачот.