FixVibe
Covered by FixVibehigh

Protecció de Next.js + Supabase: prevenció de la seguretat a nivell de fila (RLS)

Les aplicacions creades amb Next.js i Supabase sovint depenen de la seguretat a nivell de fila (RLS) per protegir les dades. Si no s'habilita RLS o la configuració incorrecta del client Supabase, pot provocar una exposició total de la base de dades, cosa que permet als usuaris no autoritzats llegir o modificar registres sensibles.

CWE-284

Impacte

Els atacants poden evitar la lògica de l'aplicació per llegir, actualitzar o suprimir registres de la base de dades si la seguretat a nivell de fila (RLS) no s'aplica correctament [S1]. Sovint, això provoca l'exposició d'informació d'identificació personal (PII) o dades d'aplicacions sensibles als usuaris que només tenen accés a la clau pública anònima API.

Causa arrel

Supabase utilitza Postgres Row Level Security per gestionar l'accés a les dades a nivell de base de dades, que és fonamental per protegir les dades [S1]. En un entorn Next.js, els desenvolupadors han de crear un client Supabase que gestioni correctament les galetes i les sessions per mantenir la seguretat durant la representació del servidor [S2]. Les vulnerabilitats solen sorgir quan:

  • Les taules es creen sense RLS habilitat, fent-les accessibles mitjançant la clau pública anon [S1].
  • El client Supabase està mal configurat a Next.js, i no pot passar correctament els testimonis d'autenticació d'usuari a la base de dades [S2].
  • Els desenvolupadors utilitzen accidentalment la clau service_role al codi del client, que passa per alt totes les polítiques RLS [S1].

Correccions concretes

  • Activa RLS: Assegureu-vos que la seguretat a nivell de fila estigui activada per a cada taula de la vostra base de dades Supabase [S1].
  • Definir polítiques: Creeu polítiques de Postgres específiques per a les operacions SELECT, INSERT, UPDATE i DELETE per restringir l'accés basant-se en el DELETE de l'usuari.
  • Utilitzeu clients SSR: Implementeu el paquet @supabase/ssr per crear clients a Next.js que gestionen correctament l'autenticació del servidor i la persistència de la sessió [S2].

Com ho prova FixVibe

FixVibe ja cobreix això mitjançant comprovacions d'aplicacions desplegades i de repo. El mòdul passiu baas.supabase-rls descobreix l'URL Supabase i els parells de claus anònimes dels paquets de JavaScript del mateix origen, demana a PostgREST metadades de la taula pública i realitza seleccions limitades de només lectura per confirmar l'exposició de dades anònimes sense mutar les dades del client. Les exploracions de repo també executen repo.supabase.missing-rls per marcar les migracions SQL que creen taules públiques sense ENABLE ROW LEVEL SECURITY, i les exploracions secretes busquen l'exposició de claus de servei abans que arribi al navegador.