Files
octto-engenharia/docs/security-checklist.md

4.5 KiB

Security Checklist - OCCTO Engenharia

Implementado

1. JWT Secret Fortalecido

  • Status: Concluído
  • Implementação:
    • Substituído secret fraco por string de 128 caracteres aleatórios
    • Gerado com crypto.randomBytes(64).toString('hex')
    • Adicionados comentários de segurança no .env
  • Arquivos: .env, .env.example

2. Cookies Seguros

  • Status: Concluído
  • Implementação:
    • httpOnly: true - Previne acesso via JavaScript (XSS)
    • secure: process.env.NODE_ENV === 'production' - HTTPS em produção
    • sameSite: 'strict' - Previne CSRF
    • path: '/' - Scope definido explicitamente
    • maxAge: 60 * 60 * 24 * 7 - Expiração de 7 dias
  • Arquivos: src/app/api/auth/login/route.ts

3. Console Logs Removidos

  • Status: Concluído
  • Implementação: Removidos todos console.log de produção
  • Arquivos:
    • src/app/api/users/[id]/route.ts
    • src/app/admin/usuarios/[id]/page.tsx

4. Documentação de Ambiente

  • Status: Concluído
  • Implementação:
    • Criado .env.example com instruções
    • Adicionada geração de JWT_SECRET via crypto
    • Preparação para Redis (rate limiting futuro)
  • Arquivos: .env.example

5. Rota de Setup Removida

  • Status: Concluído
  • Implementação: Deletado endpoint /api/setup
  • Motivação: Endpoint temporário apenas para criação inicial do admin
  • Arquivos: src/app/api/setup/route.ts (removido)

6. Rate Limiting

  • Status: Implementado (in-memory)
  • Implementação Atual:
    • 5 tentativas de login por 15 minutos por IP
    • Armazenamento em Map (memória)
  • Próximos Passos (Produção):
    • Migrar para Redis quando escalar múltiplas instâncias
    • Variável REDIS_URL já preparada no .env.example
  • Arquivos: src/app/api/auth/login/route.ts

🔒 Recursos de Segurança Existentes

Autenticação

  • Senhas hasheadas com bcryptjs (10 rounds)
  • JWT com expiração de 7 dias
  • Proteção contra timing attacks (bcrypt.compare)
  • Validação de email único

Autorização

  • Middleware de autenticação em todas as rotas /api/users
  • Verificação de token JWT
  • Bloqueio de deleção do último usuário

Upload de Arquivos

  • Validação de tipo (apenas imagens)
  • Limite de tamanho (5MB)
  • Armazenamento seguro no MinIO/S3
  • URLs temporárias para download

Frontend

  • Toast notifications globais (sem alerts nativos)
  • Confirm dialogs modernos (sem confirms nativos)
  • Validação de formulários

📋 Recomendações Futuras

Quando escalar para produção:

  1. Rate Limiting com Redis

    npm install ioredis
    
    • Migrar Map para Redis
    • Permitir múltiplas instâncias Next.js
  2. CORS Configuration

    • Definir origins permitidos
    • Configurar headers de segurança
  3. Helmet Headers

    npm install helmet
    
    • Content Security Policy
    • X-Frame-Options
    • X-Content-Type-Options
  4. Logs de Auditoria

    • Log de logins (sucesso/falha)
    • Log de alterações de usuários
    • Log de uploads/deletes de arquivos
  5. Monitoramento

    • Sentry para error tracking
    • Winston/Pino para logs estruturados
    • Métricas de performance
  6. Backup Automático

    • PostgreSQL daily backups
    • MinIO replication/backup
    • Restore procedures documentados

🚀 Deploy Checklist

Antes de ir para produção:

  • Configurar NODE_ENV=production
  • Gerar novo JWT_SECRET no servidor
  • Configurar MINIO_USE_SSL=true
  • Configurar Redis (opcional mas recomendado)
  • Configurar HTTPS (Let's Encrypt)
  • Review de todas as variáveis de ambiente
  • Testar backup/restore procedures
  • Configurar monitoring/alerting
  • Audit logs implementados
  • Performance testing

📝 Notas

  • Status Geral: Sistema seguro para desenvolvimento e pequena escala
  • TypeScript: Todos os tipos estão corretos após prisma generate
  • Erros de Build:
    • Erro do LanguageContext é cache do TypeScript (arquivo existe)
    • Erros do Prisma Client resolvidos após regeneração
    • Recarregar VS Code se persistir

🔐 Segredos e Credenciais

Desenvolvimento (Docker local)

  • PostgreSQL: admin / adminpassword
  • MinIO: admin / adminpassword
  • Admin: admin@occto.com / admin

Produção

  • NUNCA commitar .env no repositório
  • Usar variáveis de ambiente do servidor (Vercel, AWS, etc.)
  • Rotacionar secrets periodicamente
  • Backup seguro das credenciais (1Password, AWS Secrets Manager)