Crítico

RLS bloqueia INSERT pela chave anônima

Envia um INSERT para cada tabela com um id sentinela e uma coluna que não existe, e confere se o banco recusa a operação por permissão.

Por que importa

Com INSERT aberto, qualquer visitante cria linhas nas suas tabelas: cadastros falsos, spam ou registros que disparam triggers com mais permissões do que a role anon.

Como corrigir

Habilite RLS na tabela e crie uma política FOR INSERT com WITH CHECK ligado ao usuário, por exemplo WITH CHECK (auth.uid() = user_id). Não conceda INSERT à role anon com GRANT.

Como conferir a correção

SB-005
# A coluna inexistente deve fazer o banco recusar a linha. Numa tabela sem RLS,
# essa recusa é a única proteção, então prefira rodar em um projeto de teste.
curl -s -w '\n%{http_code}\n' \
  -X POST "$SUPABASE_URL/rest/v1/<tabela>?on_conflict=__veloz_audit_nonexistent__" \
  -H "apikey: $ANON_KEY" -H "Authorization: Bearer $ANON_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"id":"__veloz_audit_nonexistent__","__veloz_audit_field___veloz_audit_nonexistent__":"__veloz_audit_nonexistent__"}'

Referências