Header X-Powered-By: Express kann nicht entfernt werden

168

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?

Tyronegcarter
quelle
@alessioalex Diese Frage hat mehr Ansichten (aus welchen Gründen auch immer). Lassen Sie uns stattdessen ein anderes Duplikat davon erstellen.
Alexei Levenkov

Antworten:

247

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();
});
Giacomo
quelle
16
Ich musste es vorher platzieren, app.use(app.router);damit es funktioniert.
Pavel Hlobil
2
Gleich wie app.set ('x-powered-by', false);
Harrisunderwork
1
Hat nicht funktioniert 4.15.2. @ Harrisunderwork Lösung mit app.set()hat den Trick gemacht.
Daniel W.
54

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()
})
Christopher Scott
quelle
50

Ab Express v3.0.0rc5 ist die Unterstützung zum Deaktivieren des X-Powered-ByHeaders integriert:

var express = require('express');

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

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!
efkan
quelle
10

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.

Papercowboy
quelle
3

Vielleicht könnte dies für erfahrene Express-Benutzer offensichtlich sein, aber nur das hat bei mir funktioniert:

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

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());
Arjun Kori
quelle
Würden Sie dafür eine ganze Bibliothek einbinden?
Moha das allmächtige Kamel
Ja, wir müssen die Helmbibliothek verwenden. Wenn Sie Expressjs Fremework verwenden, können Sie die Bibliothek mit diesem Code vermeiden. app.disable ("x-powered-by");
Arjun Kori
2

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();
});
1nstinct
quelle
Funktionierte auch für Express Version 4.16.3. Keine andere Lösung hat funktioniert.
Xyroid
2

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();
Jacco Mol
quelle
1

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)

hellvinz
quelle
1
Ich denke, der Webserver-Ansatz ist sowieso der beste. Dies unterstützt eine bewährte Methode.
Dominic
0

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) ->
  ...
Dejan Ranisavljevic
quelle
0

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

László Matuska
quelle