Impossibile eliminare l'intestazione X-Powered-By: Express


168

Sto eseguendo un server su nodejs con Express. Non riesco a liberarmi dell'intestazione:

X-Powered-By:Express

Mi chiedevo se ci fosse un modo per sbarazzarsi di questa intestazione o devo conviverci?


@alessioalex questa domanda ha più visualizzazioni (per qualsiasi motivo sia più popolare), quindi facciamo altri duplicati di questo invece.
Alexei Levenkov,

Risposte:


247

In Express> = 3.0.0rc5:

app.disable('x-powered-by');

Ecco un semplice middleware che rimuove l'intestazione nelle versioni precedenti di Express:

app.use(function (req, res, next) {
  res.removeHeader("x-powered-by");
  next();
});

16
Ho dovuto posizionarlo prima app.use(app.router);perché funzionasse.
Pavel Hlobil il

2
Come per app.set ('x-powered-by', false);
harrisunderwork,

1
Non ha funzionato 4.15.2. La soluzione di @harrisunderwork usando ha app.set()fatto il trucco.
Daniel W.

54

Solo per dare una occhiata alla risposta di rjack, potresti anche (facoltativamente) cambiare (impostare) l'intestazione X-powered in qualcosa di molto più fresco / personalizzato come questo:

app.use(function (req, res, next) {
  res.header("X-powered-by", "Blood, sweat, and tears")
  next()
})

50

A partire da Express v3.0.0rc5, il supporto per la disabilitazione X-Powered-Bydell'intestazione è integrato:

var express = require('express');

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


10

Ecco un pratico middleware che puoi inserire per scambiare 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

L'impostazione di X-Powered in questo caso avrebbe la precedenza su "Express" predefinito, quindi non è necessario disabilitare E impostare un nuovo valore.


3

Forse questo potrebbe essere ovvio per gli utenti Express più esperti, ma solo questo ha funzionato per me:

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

3

A volte le risposte in alto non funzionano. Questo è il mio caso Ho Express 4.17.1 e nessuna risposta non funziona. Quindi ho inventato la mia soluzione:

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

Ha funzionato anche per Express versione 4.16.3. Nessun'altra soluzione ha funzionato.
Xyroid

1
ha funzionato anche per me grazie!
Fernix,

2

Per nascondere, X-Powered By è possibile utilizzare il casco Libreria Nodo .js .

Il link per quello è il casco

var helmet = require('helmet');
app.use(helmet.hidePoweredBy());

Includeresti un'intera biblioteca per questo?
Moha l'onnipotente cammello,

sì, dobbiamo usare la libreria del casco. Se stai usando Expressjs Fremework, puoi evitare la libreria con questo codice app.disable ("x-powered-by");
Arjun Kori,

2

Nemmeno nessuno degli addetti alle soluzioni standard per me. Dopo molte ricerche ho scoperto che abbiamo usato un file di route in cui è stata avviata una nuova istanza express, che è stata successivamente aggiunta alla prima utilizzando app.use. Solo per le rotte in questa nuova istanza espressa era presente l'intestazione X-Powered-By.

Vista semplicistica 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 soluzione era semplicemente quella di creare un nuovo express.Router anziché un'intera istanza.

const moreRoutes = express.Router();


0

removeHeader funzionerà solo nel middleware di route, esempio di coffeescript

fix_headers =  (req, res, next) ->
    res.removeHeader 'X-Powered-By'
    next()

app.get '/posts', fix_headers, (req, res, next) ->
  ...

0

Niente di tutto questo ha funzionato per me, tranne questo (è necessario aggiungere un altro parametro):

app.use(helmet.hidePoweredBy({ setTo: 'guesswhat' }))

Sto usando Express ^ 4.17

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.