93 lines
2.3 KiB
Markdown
93 lines
2.3 KiB
Markdown
# Middleware - Security Layer
|
|
|
|
Middlewares de segurança aplicados a todas as requisições HTTP.
|
|
|
|
---
|
|
|
|
## 📦 Middlewares Disponíveis
|
|
|
|
### `auth.go` - Autenticação JWT
|
|
|
|
Valida tokens JWT e extrai claims do usuário.
|
|
|
|
```go
|
|
// Uso em rotas protegidas
|
|
mux.Handle("/protected", AuthMiddleware(handler))
|
|
|
|
// Com verificação de role
|
|
mux.Handle("/admin", AuthMiddleware(RequireRole("superadmin")(handler)))
|
|
```
|
|
|
|
**Claims extraídas:**
|
|
- `UserID` - ID do usuário
|
|
- `Role` - Papel (superadmin, admin, recruiter, candidate)
|
|
- `CompanyID` - ID da empresa (se aplicável)
|
|
|
|
---
|
|
|
|
### `cors.go` - Cross-Origin Resource Sharing
|
|
|
|
Configura origens permitidas via variável de ambiente.
|
|
|
|
```env
|
|
CORS_ORIGINS=http://localhost:3000,https://gohorsejobs.com
|
|
```
|
|
|
|
**Headers configurados:**
|
|
- `Access-Control-Allow-Origin` (whitelist)
|
|
- `Access-Control-Allow-Methods`
|
|
- `Access-Control-Allow-Headers`
|
|
- `Access-Control-Allow-Credentials`
|
|
|
|
---
|
|
|
|
### `rate_limit.go` - Rate Limiting
|
|
|
|
Limita requisições por IP para prevenir abusos.
|
|
|
|
**Configuração padrão:**
|
|
- 100 requisições por minuto por IP
|
|
- Retorna `429 Too Many Requests` quando excedido
|
|
|
|
**Headers de resposta:**
|
|
- `Retry-After: 60` (quando limitado)
|
|
|
|
---
|
|
|
|
### `security_headers.go` - Security Headers (OWASP)
|
|
|
|
Adiciona headers de segurança recomendados pela OWASP.
|
|
|
|
| Header | Valor | Proteção |
|
|
|--------|-------|----------|
|
|
| `X-Frame-Options` | `DENY` | Clickjacking |
|
|
| `X-Content-Type-Options` | `nosniff` | MIME sniffing |
|
|
| `X-XSS-Protection` | `1; mode=block` | XSS |
|
|
| `Referrer-Policy` | `strict-origin-when-cross-origin` | Vazamento de referrer |
|
|
| `Content-Security-Policy` | (configurado) | Injeção de conteúdo |
|
|
| `Permissions-Policy` | (configurado) | APIs perigosas |
|
|
|
|
---
|
|
|
|
### `logging.go` - Request Logging
|
|
|
|
Loga todas as requisições com método, path e duração.
|
|
|
|
---
|
|
|
|
## 🔗 Ordem de Aplicação
|
|
|
|
Os middlewares são aplicados na seguinte ordem (de fora para dentro):
|
|
|
|
1. **Security Headers** - Headers de segurança
|
|
2. **Rate Limiting** - Limitação de taxa
|
|
3. **CORS** - Cross-origin
|
|
4. **Logging** - Log de requisições
|
|
5. **Auth** - Autenticação (quando aplicável)
|
|
|
|
```go
|
|
// Em router.go
|
|
handler = CORSMiddleware(handler)
|
|
handler = RateLimitMiddleware(100, time.Minute)(handler)
|
|
handler = SecurityHeadersMiddleware(handler)
|
|
```
|