Initial commit: CMS completo com gerenciamento de leads e personalização de tema

This commit is contained in:
Erik
2025-11-26 14:09:21 -03:00
commit aaa1709e41
106 changed files with 26268 additions and 0 deletions

151
docs/security-checklist.md Normal file
View File

@@ -0,0 +1,151 @@
# 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**
```bash
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**
```bash
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)