152 lines
4.5 KiB
Markdown
152 lines
4.5 KiB
Markdown
# 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)
|