Baseado nas implementações atuais do projeto.
1. Headers de segurança
O projeto define headers globais de segurança em next.config.ts e remove exposições desnecessárias em produção.
- Strict-Transport-Security com max-age, includeSubDomains e preload.
- X-Content-Type-Options: nosniff.
- X-Frame-Options: DENY.
- Referrer-Policy: strict-origin-when-cross-origin.
- Permissions-Policy restringindo câmera, microfone e geolocalização.
- Content-Security-Policy com restrições para scripts, estilos, fontes, imagens, conexões, frames, objetos, base URI, ancestrais de frame e envio de formulários.
- poweredByHeader desativado e source maps de produção desabilitados.
2. Proteção do formulário de inscrição
O endpoint principal /api/inscricao aplica proteções antes de processar a inscrição.
- Aceita apenas requisições multipart/form-data.
- Limita o tamanho total da requisição a 12 MB.
- Usa honeypot por campo oculto website.
- Bloqueia envios rápidos demais com tempo mínimo de preenchimento de 3 segundos.
- Valida Cloudflare Turnstile no servidor quando TURNSTILE_SECRET_KEY está configurada.
- Aplica rate limit por IP com Upstash Redis quando as credenciais estão configuradas.
- Retorna erro 429 para excesso de tentativas quando o rate limit está ativo.
3. Validação e sanitização dos dados
Os dados enviados pelo formulário são validados com Zod e sanitizados antes do processamento.
- Campos obrigatórios são verificados no servidor.
- E-mail é validado com formato correto.
- CPF ou passaporte são exigidos conforme o caso.
- Campos condicionais são validados, como necessidade específica e nome para certificado.
- Arrays de campos múltiplos são normalizados.
- Textos têm caracteres < e > removidos, espaços normalizados e limites de tamanho aplicados.
4. Proteção contra injeção em e-mails
Os e-mails de notificação escapam conteúdo vindo do usuário antes de montar o HTML, reduzindo risco de HTML injection ou execução indevida de conteúdo enviado no formulário.
5. Segurança de uploads
- São aceitos no máximo 3 arquivos.
- Apenas arquivos PDF são aceitos.
- Cada arquivo pode ter no máximo 10 MB.
- O total de anexos pode ter no máximo 10 MB.
- A extensão .pdf é exigida.
- O MIME type precisa ser application/pdf.
- O conteúdo inicial do arquivo precisa bater com a assinatura %PDF-.
- O nome do arquivo é normalizado e limitado antes de ser enviado por e-mail.
6. Redução de exposição de dados pessoais
- A URL de checkout da Hotmart é montada sem nome, e-mail, telefone, CPF, passaporte ou endereço.
- Erros externos não são retornados diretamente ao usuário final.
- O log do endpoint usa mensagem segura de erro e não registra o payload completo do formulário.
- O mapa LGPD orienta a não registrar payload completo em logs e a não colocar dados pessoais em query string.
7. Endpoints antigos desativados
Os endpoints antigos de inscrição foram encerrados com resposta 410 Gone: /api/enviar-formulario e /api/inscricoes. Essas rotas informam que foram substituídas por /api/inscricao.
8. Documentação operacional de segurança e LGPD
- LGPD_DATA_MAP.md: mapa de dados pessoais, finalidades, destinos, retenção sugerida e observações.
- SECURITY_CHECKLIST.md: checklist de pré-deploy para build, dependências, formulário, upload, dados pessoais, headers e operação.
- SECURITY_INCIDENT_RESPONSE.md: roteiro de resposta a incidente de segurança.
9. Terceiros considerados no tratamento de dados
- Netlify: hospedagem e execução serverless.
- Brevo/Resend: envio de e-mail.
- Hotmart: checkout e pagamento.
- Cloudflare Turnstile: validação anti-bot quando configurado.
- Upstash Redis: rate limit quando configurado.
