Middleware HTTP
Helmet, CORS, cookies, rate limit e bootstrap HTTP via applyHttpMiddleware.Helmet, CORS, cookie-parser e rate limit são aplicados em um único ponto: applyHttpMiddleware em src/host/bootstrap/apply-http-middleware.ts. O main.ts chama essa função logo após NestFactory.create.
import { applyHttpMiddleware } from '@/host/bootstrap/apply-http-middleware';
async function bootstrap() {
const app = await NestFactory.create(AppModule);
applyHttpMiddleware(app);
// ...
}
Helmet (headers de segurança)
O bootstrap registra helmet antes de cookies, rate limit e CORS. A configuração segue o padrão Globo Seguros:
| Opção | Comportamento |
|---|---|
contentSecurityPolicy |
CSP restritiva (defaultSrc: none); scripts/estilos/imagens do Scalar via cdn.jsdelivr.net; fontes também em fonts.scalar.com |
hsts |
Ativo apenas quando NODE_ENV=production |
upgradeInsecureRequests |
Só em produção |
crossOriginEmbedderPolicy |
false (compatível com Scalar / assets externos) |
Demais headers padrão do Helmet (X-Content-Type-Options, X-Frame-Options, etc.) permanecem ativos.
CORS
Por padrão a API aceita qualquer origin (origin: true com credentials: true), alinhado ao princípio de APIs públicas e consumíveis por qualquer cliente.
Para restringir, defina CORS_ORIGINS no .env (origens separadas por vírgula):
CORS_ORIGINS=http://localhost:4200,https://app.example.com
A resolução fica em resolveCorsOrigin() (src/core/utils/resolve-cors-origins.ts):
CORS_ORIGINS |
Comportamento |
|---|---|
| ausente ou vazio | true — reflete a origin da requisição |
| uma origem | string única |
| várias origens | array de strings |
Rate limit
Middleware em src/core/http/rate-limit.middleware.ts, registrado pelo bootstrap. Desabilitado por padrão (RATE_LIMIT_MAX=0).
RATE_LIMIT_MAX=300
RATE_LIMIT_WINDOW_MS=60000
| Variável | Default | Descrição |
|---|---|---|
RATE_LIMIT_MAX |
0 |
Máximo de requisições por IP na janela; 0 desliga |
RATE_LIMIT_WINDOW_MS |
60000 |
Janela em milissegundos |
Resposta ao exceder o limite: HTTP 429 com mensagem JSON padronizada.
Cookies
cookie-parser é registrado no bootstrap — necessário para refresh token em cookie (/auth/refresh) quando autenticação JWT está instalada.
Testes
src/test/core/resolve-cors-origins.spec.tssrc/test/core/http/rate-limit.middleware.spec.ts
Visão de camadas: Segurança.
Veja também: Variáveis de ambiente, Estrutura do projeto.