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.
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
| Prioridade | Controle | Especificidades (Express) |
|---|---|---|
| P0 | Cabeçalhos de segurança | estilo helmet: CSP/HSTS/X-Content-Type, etc. Desabilite x-powered-by |
| P0 | CVEs de dependências npm | Monitore com npm audit/osv-scanner; julgue pela versão em execução, corrija rápido |
| P0 | Segredos e erros | Segredos das variáveis de ambiente. Não exponha stack traces em produção |
| P1 | Validação de entrada | Valide/sanitize as entradas (tipo/faixa/permitido). Limites de tamanho de corpo |
| P1 | Injeção | Vincule as consultas de BD. Cuidado com injeção de operador NoSQL ($). Não passe entrada para eval |
| P1 | Autorização | Autenticação + autorização com escopo de dono em cada rota. JWT: verifique a assinatura, fixe o alg |
| P2 | Limitação de taxa | Limites de tentativa/vazão no login/APIs. Contenha força bruta, abuso, DoS |
| P2 | Sessões/cookies | secure/httpOnly/sameSite. CSRF (sessões em cookie). Armazenamento de sessão de produção |
| P2 | SSRF | Lista 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-bypara 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 auditou 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:nonepermitido
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/sameSitenos 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, definatrust proxycorretamente 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.
Cabeçalhos e exposição
x-powered-by sumiu, via o verificador de cabeçalhos.Os erros não vazam informações internas
A autorização se sustenta
Dependências, limitação de taxa, SSRF
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
- Hub: segurança por framework · segurança do Next.js (também Node)
- Prática: monitorar CVEs de dependências · o manual de resposta a vulnerabilidades
- Glossário: o que é IDOR · o que é SSRF · o que é JWT · o que é CSRF
- Ferramentas: verificador de cabeçalhos de segurança · decodificador de JWT
FAQ
QO que devo fazer primeiro para proteger o Express?
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?
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?
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?
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?
(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.