Row Level Security ativo na leitura, esquecido na escrita. O Shield ataca esse padrão com sondas não-destrutivas usando um sentinela impossível: descobre a falha sem nunca tocar em uma linha real.
Exatamente esta forma. O sentinela garante que o filtro nunca casa com nenhuma linha: o banco responde o código de política, não o resultado da escrita.
# Sonda não-destrutiva — nunca toca em linhas reais.
# O filtro exige id='__veloz_audit_nonexistent__', um valor que não existe.
# 204 = RLS aberta (falha). 401 ou 42501 = RLS protegendo (passa).
curl -s -o /dev/null -w '%{http_code}\n' \
-X PATCH "$SUPABASE_URL/rest/v1/<tabela>?id=eq.__veloz_audit_nonexistent__" \
-H "apikey: $ANON_KEY" \
-H "Authorization: Bearer $ANON_KEY" \
-H 'Content-Type: application/json' \
-H 'Prefer: return=minimal' \
-d '{}'Verifica se o schema do PostgREST não é exposto para a chave anônima.
Ver detalhes →Garante que novos cadastros não virem sessões autenticadas sem validar o email.
Ver detalhes →Verifica se buckets privados bloqueiam o endpoint de listagem anônima.
Ver detalhes →Tenta PATCH/DELETE com filtro impossível. 204 = falha (RLS aberta). 42501 = passa.
Ver detalhes →Sonda de INSERT com payload mínimo para confirmar que a role anon não pode criar linhas em tabelas sensíveis.
Ver detalhes →Decodifica o JWT da chave anon e alerta quando `exp - iat > 10 anos`.
Ver detalhes →Verifica se funções como `http_get`, `pg_net.*` e `dblink_*` estão fora do schema exposto.
Ver detalhes →Confirma que a API não devolve `Access-Control-Allow-Origin: *` combinado com `Allow-Credentials: true`.
Ver detalhes →Garante que a tabela `auth.users` não está exposta no schema público nem acessível por views.
Ver detalhes →Sinaliza quando a API devolve a contagem total de linhas mesmo em listagens anônimas.
Ver detalhes →Cole a URL pública. Em menos de 60 segundos, você tem o relatório.