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.
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.
Respuestas:
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();
});
app.use(app.router);
para que funcione.
4.15.2
. La solución @harrisunderwork usando app.set()
hizo el truco.
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()
})
De la fuente ( http://expressjs.com/en/api.html#app.set ). En Express 4.X solo configura la aplicación usando la línea de abajo;
app.set('x-powered-by', false) // hide x-powered-by header!
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.
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();
});
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());
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();
Lectura del código https://github.com/visionmedia/express/blob/master/lib/http.js#L72 me hace pensar que tendrá que vivir con él, ya que no parece ser condicional.
Si tiene un frontend nginx / apache, aún puede eliminar el encabezado (con mod_headers para apache y headers-more para nginx)
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) ->
...
Nada de esto funcionó para mí, excepto esto (debe agregar otro parámetro):
app.use(helmet.hidePoweredBy({ setTo: 'guesswhat' }))
Estoy usando Express ^ 4.17