Ich verwende einen Server auf NodeJS mit Express. Ich kann den Header nicht loswerden:
X-Powered-By:Express
Ich habe mich gefragt, ob es eine Möglichkeit gibt, diesen Header loszuwerden, oder muss ich damit leben?
Ich verwende einen Server auf NodeJS mit Express. Ich kann den Header nicht loswerden:
X-Powered-By:Express
Ich habe mich gefragt, ob es eine Möglichkeit gibt, diesen Header loszuwerden, oder muss ich damit leben?
Antworten:
In Express> = 3.0.0rc5:
app.disable('x-powered-by');
Hier ist eine einfache Middleware, die den Header in früheren Express-Versionen entfernt:
app.use(function (req, res, next) {
res.removeHeader("x-powered-by");
next();
});
app.use(app.router);
damit es funktioniert.
4.15.2
. @ Harrisunderwork Lösung mit app.set()
hat den Trick gemacht.
Um auf die Antwort von rjack zurückzugreifen, können Sie auch (optional) den X-powered-by-Header auf etwas viel cooleres / benutzerdefiniertes wie dieses ändern (setzen):
app.use(function (req, res, next) {
res.header("X-powered-by", "Blood, sweat, and tears")
next()
})
Ab Express v3.0.0rc5 ist die Unterstützung zum Deaktivieren des X-Powered-By
Headers integriert:
var express = require('express');
var app = express();
app.disable('x-powered-by');
Aus der Quelle ( http://expressjs.com/en/api.html#app.set ). In Express 4.X stellen Sie die App einfach über die folgende Zeile ein.
app.set('x-powered-by', false) // hide x-powered-by header!
Hier ist eine praktische Middleware, die Sie herunterladen können, um X-Powered-By auszutauschen:
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
Das Festlegen von X-Powered by überschreibt in diesem Fall den Standardwert 'Express', sodass Sie nicht sowohl deaktivieren als auch einen neuen Wert festlegen müssen.
Zum Ausblenden von X-Powered By können Sie den Node .js Library- Helm verwenden .
Der Link dafür ist Helm
var helmet = require('helmet');
app.use(helmet.hidePoweredBy());
Manchmal funktionieren die Antworten oben nicht. Das ist mein Fall. Ich habe Express 4.17.1 und keine Antwort funktioniert nicht. Also habe ich meine eigene Lösung erfunden:
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();
});
Keiner der Standardlösungen arbeitet auch für mich. Nach langem Suchen stellte ich fest, dass wir eine Routendatei verwendeten, in der eine neue Expressinstanz gestartet wurde, die später mithilfe von app.use zur ersten hinzugefügt wurde. Nur für die Routen in dieser neuen Express-Instanz war der X-Powered-By-Header vorhanden.
Vereinfachte Betrachtung des Problems:
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);
Die Lösung bestand einfach darin, einen neuen Express.Router anstelle einer ganzen Instanz zu erstellen.
const moreRoutes = express.Router();
Lesen des Codes https://github.com/visionmedia/express/blob/master/lib/http.js#L72 lässt mich denken, dass Sie damit leben müssen, da es nicht bedingt zu sein scheint.
Wenn Sie ein Nginx / Apache-Frontend haben, können Sie den Header trotzdem damit entfernen (mit mod_headers für Apache und Header-more für Nginx)
removeHeader funktioniert nur in Route Middleware, z. B. Coffeescript
fix_headers = (req, res, next) ->
res.removeHeader 'X-Powered-By'
next()
app.get '/posts', fix_headers, (req, res, next) ->
...
Nichts davon hat bei mir funktioniert, außer dies (Sie müssen einen weiteren Parameter hinzufügen):
app.use(helmet.hidePoweredBy({ setTo: 'guesswhat' }))
Ich benutze Express ^ 4.17