FixVibe
Covered by FixVibehigh

Sigurimi Next.js + Supabase: Parandalimi i anashkalimeve të nivelit të sigurisë (RLS)

Aplikacionet e ndërtuara me Next.js dhe Supabase shpesh mbështeten në sigurinë e nivelit të rreshtit (RLS) për të mbrojtur të dhënat. Dështimi për të aktivizuar RLS ose konfigurimi i gabuar i klientit Supabase mund të çojë në ekspozimin e plotë të bazës së të dhënave, duke lejuar përdoruesit e paautorizuar të lexojnë ose modifikojnë regjistrime të ndjeshme.

CWE-284

Ndikimi

Sulmuesit mund të anashkalojnë logjikën e aplikacionit për të lexuar, përditësuar ose fshirë të dhënat në bazën e të dhënave nëse Siguria e nivelit të rreshtit (RLS) nuk zbatohet siç duhet [S1]. Kjo shpesh rezulton në ekspozimin e informacionit personalisht të identifikueshëm (PII) ose të dhënave të ndjeshme të aplikacionit për përdoruesit që kanë akses vetëm në çelësin publik anonim API.

Shkaku rrënjësor

Supabase përdor Postgres Row Level Security për të menaxhuar aksesin e të dhënave në nivelin e bazës së të dhënave, gjë që është thelbësore për sigurimin e të dhënave [S1]. Në një mjedis Next.js, zhvilluesit duhet të krijojnë një klient Supabase që trajton saktë skedarët dhe seancat për të ruajtur sigurinë gjatë paraqitjes së [S2] nga ana e serverit. Dobësitë zakonisht lindin kur:

  • Tabelat krijohen pa RLS të aktivizuar, duke i bërë ato të aksesueshme nëpërmjet çelësit anon publik [S1].
  • Klienti Supabase është konfiguruar gabim në Next.js, duke dështuar të kalojë siç duhet argumentet e vërtetimit të përdoruesit në bazën e të dhënave [S2].
  • Zhvilluesit përdorin aksidentalisht çelësin service_role në kodin e klientit, i cili anashkalon të gjitha politikat RLS [S1].

Rregullime konkrete

  • Aktivizo RLS: Sigurohu që Siguria e nivelit të rreshtit është aktivizuar për çdo tabelë në bazën e të dhënave Supabase [S1].
  • Përcaktoni politikat: Krijoni politika specifike Postgres për SELECT, INSERT, UPDATE dhe DELETE për të kufizuar operacionet e përdoruesit në bazë të UID [S1].
  • Përdor klientët SSR: Zbatoni paketën @supabase/ssr për të krijuar klientë në Next.js që menaxhojnë saktë vërtetimin nga ana e serverit dhe qëndrueshmërinë e sesionit [S2].

Si e teston FixVibe për të

FixVibe tashmë e mbulon këtë nëpërmjet kontrolleve të aplikacioneve të vendosura dhe repove. Moduli pasiv baas.supabase-rls zbulon URL-në Supabase dhe çiftet anon-çelës nga paketat JavaScript me origjinë të njëjtë, kërkon PostgREST për meta të dhënat publike të tabelës dhe kryen zgjedhje të kufizuara vetëm për lexim për të konfirmuar ekspozimin anonim të të dhënave të klientit pa ndryshuar ndryshimin e të dhënave. Skanimet e repove ekzekutojnë gjithashtu repo.supabase.missing-rls për të raportuar migrimet SQL që krijojnë tabela publike pa ENABLE ROW LEVEL SECURITY dhe skanimet sekrete kërkojnë ekspozimin e çelësit të rolit të shërbimit përpara se ai të arrijë në shfletues.