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?
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?
Respostas:
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();
});
app.use(app.router);
para que ele funcionasse.
4.15.2
. solução @harrisunderwork usando app.set()
fez o truque.
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()
})
Na fonte ( http://expressjs.com/en/api.html#app.set ). No Express 4.X, basta definir o aplicativo usando a linha abaixo;
app.set('x-powered-by', false) // hide x-powered-by header!
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.
À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();
});
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());
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();
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)
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) ->
...
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