As 10 verificações rodam depois de cada deploy, com a chave anônima do serviço.
Para cada tabela, o Shield envia um PATCH e um DELETE como este.
# O filtro usa um id que não existe, então nenhuma linha é alterada.
# O Shield conta 401, 403 ou o código 42501 como bloqueio e 204 como operação aceita.
curl -s -w '\n%{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 '{}'Pede a raiz da API REST (/rest/v1/) com a chave anônima e falha se a resposta trouxer o documento OpenAPI com as tabelas, colunas e funções expostas.
Ver detalhes →Lê as configurações públicas de autenticação (/auth/v1/settings) e falha quando o cadastro está aberto, o login por e-mail está ativo e novas contas são confirmadas sem validar o e-mail.
Ver detalhes →Pede a lista de buckets (/storage/v1/bucket) com a chave anônima e falha se a resposta trouxer pelo menos um bucket.
Ver detalhes →Envia PATCH e DELETE para cada tabela com o filtro id=eq.__veloz_audit_nonexistent__, que não corresponde a nenhuma linha, e confere se o banco recusa a operação por permissão.
Ver detalhes →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.
Ver detalhes →Decodifica o JWT da chave anônima e falha se a validade (exp menos iat) passar de 10 anos ou se o token não tiver data de expiração.
Ver detalhes →Chama por RPC, com a chave anônima, funções das extensões http, pg_net e dblink, e falha se alguma delas puder ser executada.
Ver detalhes →Envia um preflight (OPTIONS) para /rest/v1/ com a origem https://evil.example e falha se a resposta permitir credenciais e aceitar qualquer origem (*) ou repetir a origem recebida.
Ver detalhes →Pede /rest/v1/users com o cabeçalho Accept-Profile: auth, que seleciona o schema auth, e falha se a resposta for 200.
Ver detalhes →Pede a tabela users com Prefer: count=exact e informa se a resposta traz o total de linhas no cabeçalho Content-Range.
Ver detalhes →A equipe da Veloz ativa o Shield por projeto.