Initial commit: CMS completo com gerenciamento de leads e personalização de tema
This commit is contained in:
151
docs/security-checklist.md
Normal file
151
docs/security-checklist.md
Normal 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)
|
||||
Reference in New Issue
Block a user