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?


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

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

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


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.


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

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

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

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


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

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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.