Pular para o conteúdo
>_ITDITDPlataforma de Segurança Web

Por framework

Segurança do Express (Node.js) — uma referência de hardening para produção

Uma referência de hardening do Express (Node.js) para produção: por ser minimalista, você adiciona as defesas — cabeçalhos helmet, CVEs do npm, validação de entrada, autorização, limitação de taxa, sessões/CSRF e SSRF. Defensivo, sem passos de ataque.

Publicado 2026-07-02 Atualizado 2026-07-02 7 min de leitura

Para: qualquer pessoa que opere uma API ou aplicação em Express (Node.js). Sem passos de ataque aqui — esta é uma referência de trabalho para as defesas que você adiciona a um framework minimalista: um checklist priorizado, orientação por área e autoverificação. Para o panorama entre frameworks, veja o hub de segurança por framework.

Checklist de hardening priorizado

Faça esta tabela de cima para baixo. P0 é pré-requisito, P1 é a fonte mais frequente de incidentes, P2 é higiene operacional contínua.

P0 ── Pré-requisito (faça primeiro)

Cabeçalhos (helmet) + desabilitar x-powered-by / monitoramento de CVEs de dependências npm / segredos do env, sem exposição de stack

P1 ── Principal fonte de incidentes

Validação de entrada e defesa contra injeção / autorização com escopo de dono

P2 ── Higiene operacional

Limitação de taxa e limites de tamanho / sessões, cookies, CSRF / SSRF

Endureça da base para cima: P0 (pré-requisito) → P1 (principal fonte de incidentes) → P2 (higiene operacional).
PrioridadeControleEspecificidades (Express)
P0Cabeçalhos de segurançaestilo helmet: CSP/HSTS/X-Content-Type, etc. Desabilite x-powered-by
P0CVEs de dependências npmMonitore com npm audit/osv-scanner; julgue pela versão em execução, corrija rápido
P0Segredos e errosSegredos das variáveis de ambiente. Não exponha stack traces em produção
P1Validação de entradaValide/sanitize as entradas (tipo/faixa/permitido). Limites de tamanho de corpo
P1InjeçãoVincule as consultas de BD. Cuidado com injeção de operador NoSQL ($). Não passe entrada para eval
P1AutorizaçãoAutenticação + autorização com escopo de dono em cada rota. JWT: verifique a assinatura, fixe o alg
P2Limitação de taxaLimites de tentativa/vazão no login/APIs. Contenha força bruta, abuso, DoS
P2Sessões/cookiessecure/httpOnly/sameSite. CSRF (sessões em cookie). Armazenamento de sessão de produção
P2SSRFLista de permissão para buscas do lado do servidor + bloqueio de IPs internos/metadados

1. Cabeçalhos de segurança e redução da exposição (P0)

O Express não define cabeçalhos de segurança por padrão. Eleve essa linha de base primeiro.

  • Use middleware no estilo helmet para adicionar CSP, HSTS, X-Content-Type-Options, frameguard, etc.
  • Desabilite x-powered-by para reduzir a exposição do framework/versão.
  • Verifique o seu próprio site com o verificador de cabeçalhos de segurança.

2. Dependências (npm) e cadeia de suprimentos (P0)

  • Monitore por máquina os CVEs de dependências com npm audit ou osv-scanner, julgue pela versão em execução e corrija rápido (→ monitorar CVEs de dependências).
  • O Node tem uma árvore de dependências grande e risco de cadeia de suprimentos (typosquatting, hooks postinstall). Faça a triagem no momento da instalação e mantenha a contagem baixa.
  • Mantenha o Node em uma versão suportada (LTS) e não deixe versões EOL em produção.

3. Validação de entrada e injeção (P1)

  • Valide/sanitize toda a entrada (corpo, query, params, cabeçalhos). Defina um limite de tamanho de corpo para conter DoS.
  • SQL: vincule com placeholders; nunca construa consultas por concatenação de strings (→ o que é injeção de SQL).
  • NoSQL: cuidado com a injeção de operador ($) via entrada tipada como objeto (não passe objetos crus para as consultas).
  • Não passe entrada externa para avaliações perigosas como eval.

4. Autenticação e autorização (P1)

Comum (perigoso)

  • sem autorização — "logado = permitido"
  • confiando apenas na ordem/presença do middleware
  • confiando em IDs/flags fornecidos pelo cliente como estão
  • assinatura JWT não verificada / alg:none permitido

Correto

  • autenticação mais autorização com escopo de dono em cada rota
  • verifique perto dos dados (não confie na ordem)
  • reverifique no servidor (resista a trocas de ID)
  • verificação de assinatura JWT + alg fixado (rejeite alg:none)

Veja o que é IDOR · o que é JWT. Você mesmo pode inspecionar o conteúdo de um JWT (decodificador de JWT).

5. Limitação de taxa e abuso (P2)

  • Aplique limites de tentativa/vazão a login, APIs e redefinição de senha para conter força bruta, abuso e DoS.
  • Defina limites de tamanho em corpos de requisição e uploads (previna exaustão por payloads grandes).

6. Sessões e cookies (P2)

  • Defina secure/httpOnly/sameSite nos cookies de sessão.
  • Para aplicações com sessão em cookie, adicione proteção CSRF (→ o que é CSRF).
  • Use um armazenamento de sessão adequado em produção (o padrão em memória não serve para produção). Regenere a sessão no login.

7. SSRF e buscas do lado do servidor (P2)

  • A busca, do lado do servidor, de URLs fornecidas pelo usuário deve restringir os alvos a uma lista de permissão e bloquear o alcance a IPs internos / metadados de nuvem no momento da conexão (→ o que é SSRF).

8. Tratamento de erros e configuração de produção (P0–P2)

  • Use um tratador de erros central e não exponha stack traces externamente.
  • Execute com NODE_ENV=production. Atrás de um proxy, defina trust proxy corretamente para que o esquema e o IP do cliente não sejam mal interpretados.
  • Termine TLS/HTTPS de forma confiável.

Verifique: o seu Express está mesmo endurecido?

Construí-lo não é o fim — só está pronto quando você verificou. Estas são autoverificações defensivas contra o seu próprio ambiente.

1

Cabeçalhos e exposição

Confirme que as respostas carregam cabeçalhos no estilo helmet e que x-powered-by sumiu, via o verificador de cabeçalhos.
2

Os erros não vazam informações internas

Provoque um erro e confirme que nenhum stack trace é mostrado externamente.
3

A autorização se sustenta

Em um ambiente de teste, solicite o ID de recurso de outro usuário e confirme que é negado (leitura/atualização/exclusão).
4

Dependências, limitação de taxa, SSRF

Confirme que npm audit/osv está limpo, que a limitação de taxa no login funciona e que as buscas de saída não conseguem alcançar IPs internos.

A visão deste site: um framework minimalista une liberdade e responsabilidade

O apelo do Express é sua leveza e liberdade — o que significa que você também projeta a defesa. O que o Rails e o Laravel protegem por padrão (cabeçalhos, CSRF, um andaime de autorização), no Express você conecta deliberadamente. O centro de gravidade é trabalhar a tabela acima de cima para baixo — defina cabeçalhos, valide a entrada, escreva autorização nos pontos de entrada públicos e monitore CVEs nas dependências. O Node, em especial, tem uma grande contagem de dependências, então a atualização das dependências decide os incidentes. Abandone a suposição de que "o framework vai proteger" e adicione as defesas explicitamente.

Leia a seguir

FAQ

QO que devo fazer primeiro para proteger o Express?
A

Os três itens P0: (1) adicionar cabeçalhos de segurança (CSP/HSTS, etc.) com middleware no estilo helmet e desabilitar x-powered-by; (2) monitorar por máquina os CVEs de dependências npm e corrigir rápido, julgando pela versão em execução; (3) ler segredos do ambiente e não expor stack traces em produção. O Express não protege isso para você por padrão, então adicioná-los é a linha de base. Em seguida, avance para validação de entrada, autorização e limitação de taxa.

QPreciso de cabeçalhos de segurança como o helmet?
A

Sim. O Express não define cabeçalhos HTTP de segurança por padrão. Use middleware no estilo helmet para adicionar CSP, HSTS, X-Content-Type-Options, etc., reduzindo riscos básicos como clickjacking e MIME sniffing. Desabilite também x-powered-by para reduzir a exposição do framework. É um ganho de base só por adicioná-lo, então coloque-o primeiro.

QComo configuro autenticação e autorização?
A

Depois que um middleware de autenticação confirma o login, sempre escreva autorização com escopo de dono em cada rota — de que o alvo realmente pertence ao usuário. Não confie na ordem do middleware ou na mera presença; verifique perto dos dados. Se usar JWT, exija verificação de assinatura e fixe o alg (rejeite alg:none).

QComo gerencio vulnerabilidades de dependências npm?
A

Monitore por máquina os CVEs conhecidos com npm audit ou osv-scanner e corrija rápido, julgando pela versão em execução. O Node tem uma árvore de dependências muito grande e risco de cadeia de suprimentos (typosquatting, hooks postinstall), então a atualização das dependências e a triagem no momento da instalação fazem a diferença. Mantenha o Node em uma versão suportada (LTS) também.

QQual é o mínimo indispensável?
A

(1) cabeçalhos no estilo helmet + desabilitar x-powered-by, (2) validar/sanitizar toda a entrada, (3) autorização com escopo de dono, (4) limites de taxa + limites de tamanho de corpo no login/APIs, (5) monitoramento de CVEs de dependências npm + correção rápida, (6) não expor stack traces em produção. Esse conjunto mínimo preenche a maioria das lacunas de um framework minimalista.