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.

typescript
import { applyHttpMiddleware } from '@/host/bootstrap/apply-http-middleware';

async function bootstrap() {
  const app = await NestFactory.create(AppModule);
  applyHttpMiddleware(app);
  // ...
}

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.

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):

env
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

Middleware em src/core/http/rate-limit.middleware.ts, registrado pelo bootstrap. Desabilitado por padrão (RATE_LIMIT_MAX=0).

env
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.

cookie-parser é registrado no bootstrap — necessário para refresh token em cookie (/auth/refresh) quando autenticação JWT está instalada.

  • src/test/core/resolve-cors-origins.spec.ts
  • src/test/core/http/rate-limit.middleware.spec.ts

Visão de camadas: Segurança.

Veja também: Variáveis de ambiente, Estrutura do projeto.