Como funciona esta verificação
As apps feitas com Lovable, Bolt ou v0 costumam falar com o Supabase diretamente a partir do navegador, por isso o URL do teu projeto e a chave pública (anon ou sb_publishable_…) estão dentro do teu JavaScript. É normal: essa chave foi pensada para ser pública. O Scanaris encontra-as, pergunta à API do Supabase que tabelas expõe e, para cada uma, faz um pedido HEAD com Prefer: count=exact. A resposta traz o número de linhas que um visitante sem sessão vê, e nenhum dado. Se a API não publicar a lista de tabelas, testa os nomes que as ferramentas de IA mais usam (profiles, users, orders, messages…). No Firebase, verifica se a raiz da Realtime Database responde a uma leitura sem sessão.
O que significa um resultado
Uma tabela com mais de zero linhas visíveis de forma anónima pode ser lida por qualquer pessoa que abra o teu site: um pedido com a chave pública e leva a tabela inteira. É exatamente o padrão da vulnerabilidade do Lovable (CVE-2025-48757). Com Row Level Security ativo e políticas razoáveis, um visitante anónimo vê zero linhas, por isso um "0" nunca gera resultado.
Como corrigir no Supabase
Lista as tabelas sem RLS, ativa-o e escreve uma política por operação. Deixa leitura pública só onde os dados forem mesmo públicos (um blog, um catálogo de produtos).
-- 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);
Como corrigir no Firebase
Troca as regras do modo de teste por regras que neguem tudo por defeito e só abram o que é de cada utilizador:
{
"rules": {
".read": false,
".write": false,
"users": {
"$uid": {
".read": "auth != null && auth.uid === $uid",
".write": "auth != null && auth.uid === $uid"
}
}
}
}
O passo a passo de cada caso está no guia do Supabase e no guia do Firebase.
Perguntas frequentes
O Scanaris lê os meus dados?
Não. Só lê a contagem de linhas que a API devolve num cabeçalho; os pedidos não trazem o conteúdo das tabelas e nada é guardado.
Posso esconder a chave pública em vez disto?
Não, e não é preciso: o navegador precisa dela para falar com o Supabase. O que protege os teus dados é o RLS, não esconder a chave.