Impacte
La manca d'implementació de la seguretat a nivell de fila (RLS) permet als atacants no autenticats consultar dades d'una base de dades Supabase quan les taules públiques estan exposades a través del límit anon [S1]. Com que les aplicacions Next.js normalment exposen la clau Supabase anon al codi del costat del client, un atacant pot utilitzar aquesta clau per fer REST directe API trucades a la base de dades sensible, obviant la informació sensible de l'usuari i accedint a la lògica de l'usuari. [S2].
Causa arrel
De manera predeterminada, les taules de Postgres a Supabase requereixen l'activació explícita de Row Level Security per evitar l'accés públic [S1]. Quan un desenvolupador crea una taula però s'oblida d'habilitar RLS o no defineix polítiques restrictives, la base de dades pot exposar dades a qualsevol persona que tingui la clau anon [S1] del projecte. A les aplicacions Next.js, la representació del servidor i la recuperació del costat del client també requereixen una configuració acurada del client Supabase perquè el context d'usuari autenticat arribi a la capa de base de dades [S2].
Correccions concretes
- Activeu RLS: Executeu
ALTER TABLE "your_table_name" ENABLE ROW LEVEL SECURITY;per a cada taula pública que emmagatzemi dades de l'aplicació [S1]. - Definiu polítiques: creeu polítiques específiques que restringeixin l'accés en funció de l'estat d'autenticació de l'usuari, com ara
CREATE POLICY "Users can see their own data" ON your_table_name FOR SELECT USING (auth.uid() = user_id);[S1]. - Clients del servidor segurs: quan utilitzeu Next.js, mantingueu els clients amb funció de servei només per al servidor i encara apliqueu filtres de propietat abans de tornar les dades als usuaris [S2].
Com ho prova FixVibe
FixVibe ja executa una comprovació de només lectura Supabase RLS mitjançant baas.supabase-rls. L'escàner descobreix l'URL del projecte Supabase i la clau pública anònima dels paquets de JavaScript del mateix origen, demana a PostgREST metadades de la taula pública i intenta seleccionar de només lectura limitada per confirmar si les dades s'exposen sense una sessió d'usuari. No insereix, actualitza, suprimeix ni utilitza credencials de funció de servei. Les exploracions de repo també poden detectar-ho abans mitjançant repo.supabase.missing-rls, que marca les migracions SQL que creen taules públiques sense ENABLE ROW LEVEL SECURITY.
