Come funziona questo controllo
Le app create con Lovable, Bolt o v0 di solito parlano con Supabase direttamente dal browser, quindi l'URL del tuo progetto e la sua chiave pubblica (anon o sb_publishable_…) sono nel tuo JavaScript. È normale: quella chiave è pensata per essere pubblica. Scanaris le trova, chiede all'API di Supabase quali tabelle espone e, per ognuna, invia una richiesta HEAD con Prefer: count=exact. La risposta contiene il numero di righe che vede un visitatore senza sessione, e nessun dato. Se l'API non pubblica l'elenco delle tabelle, prova i nomi più usati dagli strumenti di IA (profiles, users, orders, messages…). Per Firebase, verifica se la radice della Realtime Database risponde a una lettura senza sessione.
Cosa significa un risultato
Una tabella con più di zero righe visibili in modo anonimo può essere letta da chiunque apra il tuo sito: una richiesta con la chiave pubblica e ottiene l'intera tabella. È esattamente lo schema della vulnerabilità di Lovable (CVE-2025-48757). Con la Row Level Security attiva e policy ragionevoli, un visitatore anonimo vede zero righe: per questo uno "0" non genera mai un risultato.
Come correggerlo in Supabase
Elenca le tabelle senza RLS, attivala e scrivi una policy per operazione. Lascia la lettura pubblica solo dove i dati sono davvero pubblici (un blog, un catalogo prodotti).
-- Tables in the public schema without RLS
select c.relname
from pg_class c
join pg_namespace n on n.oid = c.relnamespace
where n.nspname = 'public' and c.relkind = 'r' and not c.relrowsecurity;
alter table public.profiles enable row level security;
create policy "profiles: own rows" on public.profiles
for select to authenticated
using ((select auth.uid()) = id);
Come correggerlo in Firebase
Sostituisci le regole della modalità di test con regole che negano tutto per impostazione predefinita e aprono solo ciò che appartiene a ciascun utente:
{
"rules": {
".read": false,
".write": false,
"users": {
"$uid": {
".read": "auth != null && auth.uid === $uid",
".write": "auth != null && auth.uid === $uid"
}
}
}
}
La procedura passo passo è nella guida a Supabase e nella guida a Firebase.
Domande frequenti
Scanaris legge i miei dati?
No. Legge solo il conteggio delle righe che l'API restituisce in un'intestazione; le richieste non portano il contenuto delle tabelle e non viene salvato nulla.
Posso invece nascondere la chiave pubblica?
No, e non serve: il browser ne ha bisogno per parlare con Supabase. A proteggere i tuoi dati è la RLS, non nascondere la chiave.