J'exécute un serveur sur nodejs avec express. Je n'arrive pas à me débarrasser de l'en-tête:
X-Powered-By:Express
Je me demandais s'il y avait un moyen de se débarrasser de cet en-tête ou dois-je vivre avec?
J'exécute un serveur sur nodejs avec express. Je n'arrive pas à me débarrasser de l'en-tête:
X-Powered-By:Express
Je me demandais s'il y avait un moyen de se débarrasser de cet en-tête ou dois-je vivre avec?
Réponses:
Dans Express> = 3.0.0rc5:
app.disable('x-powered-by');
Voici un middleware simple qui supprime l'en-tête dans les versions antérieures d'Express:
app.use(function (req, res, next) {
res.removeHeader("x-powered-by");
next();
});
app.use(app.router);
pour que ça marche.
4.15.2
. La solution @harrisunderwork a app.set()
fait l'affaire.
Juste pour reprendre la réponse de rjack, vous pouvez également (facultativement) simplement changer (définir) l'en-tête X-powered-by en quelque chose de beaucoup plus cool / personnalisé comme ceci:
app.use(function (req, res, next) {
res.header("X-powered-by", "Blood, sweat, and tears")
next()
})
À partir d'Express v3.0.0rc5, la prise en charge de la désactivation de l'en- X-Powered-By
tête est intégrée:
var express = require('express');
var app = express();
app.disable('x-powered-by');
De la source ( http://expressjs.com/en/api.html#app.set ). Dans Express 4.X, configurez simplement l'application en utilisant la ligne ci-dessous;
app.set('x-powered-by', false) // hide x-powered-by header!
Voici un middleware pratique que vous pouvez ajouter pour remplacer 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
Définir X-Powered by dans ce cas remplacerait la valeur par défaut «Express», vous n'avez donc pas besoin à la fois de désactiver ET de définir une nouvelle valeur.
Parfois, les réponses en haut ne fonctionnent pas. C'est mon cas. J'ai Express 4.17.1 et aucune réponse ne fonctionne. J'ai donc inventé ma propre solution:
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();
});
Pour se cacher, X-Powered By vous pouvez utiliser le casque Node .js Library .
Le lien pour qui est le casque
var helmet = require('helmet');
app.use(helmet.hidePoweredBy());
Aucun des travailleurs de solutions standard pour moi non plus. Après de nombreuses recherches, j'ai découvert que nous avons utilisé un fichier de routes dans lequel une nouvelle instance express a été lancée, qui a ensuite été ajoutée à la première en utilisant app.use. Uniquement pour les routes de cette nouvelle instance express, l'en-tête X-Powered-By était présent.
Vue simpliste du problème:
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 solution était simplement de créer un nouveau routeur express au lieu d'une instance entière.
const moreRoutes = express.Router();
La lecture du code https://github.com/visionmedia/express/blob/master/lib/http.js#L72 me fait penser que vous devrez vivre avec car cela ne semble pas être conditionnel.
Si vous avez un frontend nginx / apache, vous pouvez toujours supprimer l'en-tête avec lui (avec mod_headers pour apache et headers-more pour nginx)
removeHeader fonctionnera uniquement dans le middleware de routage, exemple coffeescript
fix_headers = (req, res, next) ->
res.removeHeader 'X-Powered-By'
next()
app.get '/posts', fix_headers, (req, res, next) ->
...
Rien de tout cela n'a fonctionné pour moi, sauf ceci (vous devez ajouter un autre paramètre):
app.use(helmet.hidePoweredBy({ setTo: 'guesswhat' }))
J'utilise Express ^ 4.17