A chave anon do Supabase no site é segura? Sim — com uma condição
A chave anon (ou sb_publishable) foi feita para ficar no navegador. O que a torna perigosa é a tabela sem RLS. A diferença para a service_role, na prática.
Sim: a chave anon — ou a nova sb_publishable_… — foi feita para ir no código do site. Ela não é segredo, e esconder não adianta: qualquer visitante a vê nas ferramentas do navegador. O Supabase foi desenhado para isso.
A condição: RLS em todas as tabelas
A chave pública diz "sou um visitante deste projeto". O que ela pode fazer depende das regras de cada tabela, a RLS. Com RLS ligada e políticas por usuário, a chave pública só alcança o que aquele visitante (ou usuário logado) pode ver. Sem RLS, a mesma chave lê e altera a tabela inteira.
-- tabelas abertas (rowsecurity = false)
select tablename from pg_tables
where schemaname = 'public' and not rowsecurity;A chave que NUNCA pode ir para o site
anon/sb_publishable_…: pública. Pode ir no front. Respeita a RLS.service_role/sb_secret_…: secreta. Ignora a RLS e faz tudo no banco. Só no servidor (Edge Function, rota de API).
Um jeito de conferir: a service_role antiga é um JWT com "role": "service_role" dentro. Se essa palavra aparecer nos arquivos do site publicado (F12 → Sources → busca), troque a chave agora no painel do Supabase.
Resumo: chave pública no site é normal. Tabela sem RLS ou service_role no site é que é o problema.
Dicas curtas de segurança para quem cria com IA: siga @npx_vibedefender no Instagram.