Nexus Docs

src/config/helmet.ts

src/config/helmet.ts

Selecione outros documentos nas abas ou no menu lateral.

src/config/helmet.ts

Versão: 1.0
 Última atualização: 26 de agosto de 2025
 Responsável: Ariel Spencer & Fabrício Bahiense

📋 Descrição

O que faz?

Configura middlewares de segurança HTTP usando Helmet para proteger a aplicação contra vulnerabilidades comuns e implementa rate limiting para prevenir abuso de requisições.

Por que existe?

Adiciona camadas essenciais de segurança à API, protegendo contra ataques XSS, clickjacking, sniffing de MIME type e limitando a taxa de requisições por IP para prevenir spam e ataques DDoS básicos.

Como funciona?

Exporta configuração do Helmet com headers de segurança personalizados e um limitador de taxa que permite máximo 60 requisições por minuto por IP, retornando erro 429 quando excedido.

🔧 Documentação Técnica

Arquitetura

Cliente  Rate Limiter  Helmet Security Headers  Aplicação

            >                   

    (60 req/min/IP)    (Security Headers aplicados)

Tecnologias Utilizadas

  • Segurança: Helmet.js
  • Rate Limiting: express-rate-limit
  • Framework: Express.js middleware
  • Runtime: Node.js com TypeScript

Estrutura de Pastas

backend/                      # Projeto

└── src/                    # Source

└── config/            # Configurações

└── helmet.ts     # Configuração de segurança

Configuração

Configuração do Helmet

contentSecurityPolicy: false    // CSP desabilitado (flexibilidade)

xssFilter: true                // Proteção XSS ativada

noSniff: true                  // Previne MIME sniffing

hidePoweredBy: true           // Remove header X-Powered-By

frameguard: { action: 'deny' } // Bloqueia iframes (anti-clickjacking)

Configuração do Rate Limiter

windowMs: 1 * 60 * 1000       // Janela de 1 minuto

max: 60                       // Máximo 60 requisições por janela

message: 'Too many requests...' // Mensagem de erro

Como usar

import { helmetConfig, limiter } from'./config/helmet'
import express from 'express'
				
const app = express()
				
// Aplicar rate limiting
app.use(limiter)
// Aplicar headers de segurança
app.use(helmetConfig())

📦 Dependências

Dependências Principais

Pacote

Versão

Finalidade

helmet

^7.1.0

Headers de segurança HTTP

express-rate-limit

^6.0.0

Controle de taxa de requisições

Headers de Segurança Aplicados

Header

Valor/Ação

Proteção

X-XSS-Protection

1; mode=block

Cross-Site Scripting

X-Content-Type-Options

nosniff

MIME type sniffing

X-Frame-Options

DENY

Clickjacking

X-Powered-By

(removido)

Information disclosure

🛡️ Configurações de Segurança

Rate Limiting

  • Janela: 1 minuto por IP
  • Limite: 60 requisições máximo
  • Comportamento: HTTP 429 (Too Many Requests) quando excedido
  • Reset: Automático a cada minuto

Helmet Security Headers

  • CSP: Desabilitado para flexibilidade (considerar habilitar em produção)
  • XSS Protection: Habilitado
  • MIME Sniffing: Bloqueado
  • Frame Options: Negado (previne embedding)
  • Powered-By: Oculto

🧪 Testando a Configuração

Teste de Rate Limiting

# Testar limite de requisições
				
for i in {1..65};
				do curl -I http://localhost:3001/api; 
				done

# Esperado: Primeiras 60 retornam 200, próximas retornam 429

Verificar Headers de Segurança

curl -I http://localhost:3001/api

# Verificar presença de:
				

				# X-XSS-Protection: 1;
				mode=block

				# X-Content-Type-Options: nosniff

				# X-Frame-Options: DENY

				# (ausência de X-Powered-By)

🐛 Troubleshooting

Problemas Comuns

Rate Limit muito restritivo

Sintomas: Usuários legítimos recebem erro 429
 Causa: Limite de 60 req/min muito baixo
 Solução: Ajustar max e windowMs

CSP bloqueando recursos

Sintomas: Conteúdo não carrega no frontend
 Causa: Content Security Policy muito restritivo
 Solução: CSP já está desabilitado, mas validar
				configuração

Headers não aparecendo

Sintomas: Headers de segurança ausentes
 Causa: helmetConfig() não aplicado corretamente
 Solução: Verificar se middleware está sendo usado antes das
				rotas

⚠️ Considerações de Segurança

Recomendações para Produção

  • Habilitar CSP: Validar configuração de Content Security Policy
  • Ajustar Rate Limits: Baseado no uso dos usuários reais
  • Monitoramento: Acompanhar tentativas de rate limit excedido
  • Headers Adicionais: Considerar HSTS, Referrer Policy

Rate Limiting Avançado

// Configuração mais robusta para produção
				const limiter = rateLimit({
				
        windowMs:
				15 * 60 * 1000, // 15 minutos
        max:
				1000, // 1000 requests por 15min
        skipSuccessfulRequests:
				true, // Não contar responses 2xx
        keyGenerator:
				(req) => req.ip, // Personalizar chave
})

📚 Referências e Links Úteis


Última revisão: 26 de agosto de 2025 por Ariel Spencer & Fabrício Bahiense