Appearance
Segurança — Visão Geral
Superfície de ataque
O sistema tem três tipos de endpoints:
| Tipo | Autenticação | Exemplos |
|---|---|---|
| Autenticado | JWT Clerk | Maioria dos endpoints de negócio |
| Público | Nenhuma (ou validação específica) | Webhooks, pesquisas, redirect, email tracking |
| Interno | Internal API Key | Endpoints n8n, sync ERP |
Camadas de defesa
Internet
└─ Traefik (TLS, roteamento)
└─ Backend NestJS
├─ CORS (FRONTEND_URL)
├─ ClerkAuthGuard (JWT validation)
├─ TenantInterceptor (isolamento de org)
├─ PermissionsGuard (RBAC)
├─ ReadOnlyGuard (mutações)
├─ UserThrottlerGuard (rate limit)
└─ AuditInterceptor (log de ações)Dados sensíveis no sistema
| Dado | Onde | Proteção |
|---|---|---|
| Senhas SMTP | OrganizationSmtpSettings.pass | AES-256-GCM criptografado |
| Tokens WhatsApp | StoreWhatsappNumber.accessToken | AES-256-GCM criptografado |
| App Secret Meta | StoreWhatsappNumber.appSecret | AES-256-GCM criptografado |
| CPF | Customer.cpfHash | SHA-256 (irreversível) |
| CPF display | Customer.cpfMasked | ***.***.*XX-** |
| Clerk Secret Key | Ambiente / Azure Key Vault | Nunca no banco |
| Internal API Key | Ambiente / Azure Key Vault | Nunca no banco |
| Master Encryption Key | Ambiente / Azure Key Vault | Nunca no banco |
O que nunca logar
- Tokens de autenticação (Clerk JWT, API keys)
- Senhas (SMTP, Redis)
- CPF em texto puro
- Números de cartão ou dados financeiros completos
- Chaves de criptografia
O middleware HTTP mascara automaticamente IPs e pseudonimiza userIds nos logs.
Índice desta seção
- Autenticação (Clerk) — Como o login funciona
- Autorização (RBAC) — Guards, papéis, permissões
- Secrets & Criptografia — Onde ficam os secrets e como são protegidos
- Checklist de código seguro — O que verificar ao escrever novos endpoints
- Resposta a incidentes — O que fazer se algo der errado