No se puede deshacer del encabezado X-Powered-By: Express


168

Estoy ejecutando un servidor en nodejs con express. Parece que no puedo deshacerme del encabezado:

X-Powered-By:Express

Me preguntaba si hay alguna forma de deshacerme de este encabezado o si tengo que vivir con él.


@alessioalex esta pregunta tiene más puntos de vista (por cualquier razón es más popular), así que hagamos otro duplicado de esto.
Alexei Levenkov

Respuestas:


247

En Express> = 3.0.0rc5:

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

Aquí hay un middleware simple que elimina el encabezado en versiones anteriores de Express:

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

16
Tuve que colocarlo antes app.use(app.router);para que funcione.
Pavel Hlobil

2
Igual que app.set ('x-powered-by', falso);
harrisunderwork

1
No funcionó en 4.15.2. La solución @harrisunderwork usando app.set()hizo el truco.
Daniel W.

54

Solo para aprovechar la respuesta de rjack, también podría (opcionalmente) simplemente cambiar (configurar) el encabezado X-powered-by a algo mucho más genial / personalizado como este:

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

50

A partir de Express v3.0.0rc5, el soporte para deshabilitar el X-Powered-Byencabezado está integrado:

var express = require('express');

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


10

Aquí hay un práctico middleware que puede colocar para cambiar 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

La configuración de X-Powered by en este caso anularía el valor predeterminado 'Express', por lo que no es necesario deshabilitar Y establecer un nuevo valor.


3

Tal vez esto podría ser obvio para los usuarios Express más experimentados, pero solo esto funcionó para mí:

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

3

A veces las respuestas en la parte superior no funcionan. Este es mi caso Tengo Express 4.17.1 y ninguna respuesta no funciona. Entonces inventé mi propia solución:

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();
});

Trabajó para Express versión 4.16.3 también. Ninguna otra solución funcionó.
Xyroid

1
trabajó para mí también, gracias!
Fernix

2

Para Ocultar, X-Powered By puedes usar el casco Node .js Library .

El enlace para eso es casco

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

¿Incluirías una biblioteca completa para esto?
Moha el todopoderoso camello

sí, tenemos que usar la biblioteca de cascos. Si está usando expressjs fremework, entonces puede evitar la biblioteca con este código app.disable ("x-powered-by");
Arjun kori

2

Ninguna de las soluciones estándar funciona para mí tampoco. Después de mucha búsqueda descubrí que usamos un archivo de rutas donde se inició una nueva instancia express, que luego se agregó a la primera mediante app.use. Solo para las rutas en esta nueva instancia expresa, el encabezado X-Powered-By estaba presente.

Vista simplista del problema:

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);

La solución fue simplemente crear un nuevo Express.Router en lugar de una instancia completa.

const moreRoutes = express.Router();


0

removeHeader solo funcionará en middleware de ruta, ejemplo de coffeescript

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

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

0

Nada de esto funcionó para mí, excepto esto (debe agregar otro parámetro):

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

Estoy usando Express ^ 4.17

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.