Não é possível se livrar do cabeçalho X-Powered-By: Express


168

Estou executando um servidor no nodejs com express. Não consigo me livrar do cabeçalho:

X-Powered-By:Express

Eu queria saber se existe alguma maneira de se livrar desse cabeçalho ou eu tenho que viver com ele?


@alessioalex esta pergunta tem mais visualizações (por qualquer motivo que seja mais popular), então vamos fazer outra duplicata disso.
Alexei Levenkov 04/10/2014

Respostas:


247

No Express> = 3.0.0rc5:

app.disable('x-powered-by');

Aqui está um middleware simples que remove o cabeçalho nas versões anteriores do Express:

app.use(function (req, res, next) {
  res.removeHeader("x-powered-by");
  next();
});

16
Eu tive que colocá-lo antes app.use(app.router);para que ele funcionasse.
Pavel Hlobil 14/01

2
O mesmo que app.set ('x-powered-by', false);
harrisunderwork

1
Não funcionou 4.15.2. solução @harrisunderwork usando app.set()fez o truque.
Daniel W.

54

Apenas para acompanhar a resposta de rjack, você também pode (opcionalmente) alterar (definir) o cabeçalho alimentado por X para algo muito mais legal / personalizado como este:

app.use(function (req, res, next) {
  res.header("X-powered-by", "Blood, sweat, and tears")
  next()
})

50

A partir do Express v3.0.0rc5, o suporte para desativar o X-Powered-Bycabeçalho é incorporado:

var express = require('express');

var app = express();
app.disable('x-powered-by');


10

Aqui está um middleware útil que você pode usar para trocar o X-Powered-By:

function customHeaders( req, res, next ){
  // Switch off the default 'X-Powered-By: Express' header
  app.disable( 'x-powered-by' );

  // OR set your own header here
  res.setHeader( 'X-Powered-By', 'Awesome App v0.0.1' );

  // .. other headers here

  next()
}

app.use( customHeaders );

// ... now your code goes here

A configuração de X-Powered nesse caso substituirá o padrão 'Express', para que você não precise desativar E definir um novo valor.


3

Talvez isso possa ser óbvio para os usuários mais experientes do Express, mas apenas isso funcionou para mim:

app.configure(function() {
    app.use(function (req, res, next) {
        res.removeHeader("X-Powered-By");
        next();
    });
});

3

Às vezes, as respostas no topo não funcionam. Este é o meu caso. Eu tenho o Express 4.17.1 e ninguém responde não funciona. Então, eu inventei minha própria solução:

let app = express();

app.use((req, res, next) => {
  const send = res.send;
  res.send = (data) => {
    res.removeHeader('X-Powered-By');
    return send.call(res, data);
  };

  next();
});

Também funcionou para a versão 4.16.3 do Express. Nenhuma outra solução funcionou.
Xyroid

1
trabalhou para mim também obrigado!
Fernix

2

Para ocultar, X-Powered By, você pode usar o capacete da biblioteca Node .js .

O Link Para isso é capacete

var helmet = require('helmet');
app.use(helmet.hidePoweredBy());

Você incluiria uma biblioteca inteira para isso?
Moha o todo-poderoso camelo

sim, temos que usar a biblioteca de capacete. Se você estiver usando o expressjs fremework, poderá evitar a biblioteca usando este código app.disable ("x-powered-by");
arjun kori 21/06

2

Nenhuma das soluções padrão trabalha para mim também. Depois de muita pesquisa, descobri que usamos um arquivo de rotas em que uma nova instância expressa foi iniciada, que foi posteriormente adicionada à primeira usando app.use. Somente para as rotas nessa nova instância expressa, o cabeçalho X-Powered-By estava presente.

Visão simplista da questão:

const app = express();
app.disable("x-powered-by");
app.get("/ping", (req, res) => res.send("Pong")); // <-- no X-Powered-By header

const moreRoutes = express();
moreRoutes.get("/ping", (req, res) => res.send("Pong")); // <-- X-Powered-By header still present

app.use("/api/v2", moreRoutes);

A solução foi simplesmente criar um novo express.Router em vez de uma instância inteira.

const moreRoutes = express.Router();

1

Lendo o código https://github.com/visionmedia/express/blob/master/lib/http.js#L72 me faz pensar que você terá que conviver com ele, pois não parece ser condicional.

Se você possui um frontend nginx / apache, ainda pode remover o cabeçalho com ele (com mod_headers para apache e headers-more para nginx)


1
Eu acho que a abordagem do servidor web é a melhor de qualquer maneira. Isso suporta uma prática recomendada.
Dominic

0

removeHeader funcionará apenas no middleware de rota, exemplo de coffeescript

fix_headers =  (req, res, next) ->
    res.removeHeader 'X-Powered-By'
    next()

app.get '/posts', fix_headers, (req, res, next) ->
  ...

0

Nada disso funcionou para mim, exceto isso (você precisa adicionar outro parâmetro):

app.use(helmet.hidePoweredBy({ setTo: 'guesswhat' }))

Estou usando o Express ^ 4.17

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.