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?
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?
Risposte:
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();
});
app.use(app.router);
perché funzionasse.
4.15.2
. La soluzione di @harrisunderwork usando ha app.set()
fatto il trucco.
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()
})
A partire da Express v3.0.0rc5, il supporto per la disabilitazione X-Powered-By
dell'intestazione è integrato:
var express = require('express');
var app = express();
app.disable('x-powered-by');
Dalla fonte ( http://expressjs.com/en/api.html#app.set ). In Express 4.X basta impostare l'app utilizzando la riga seguente;
app.set('x-powered-by', false) // hide x-powered-by header!
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.
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();
});
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());
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();
Leggere il codice https://github.com/visionmedia/express/blob/master/lib/http.js#L72 mi fa pensare che dovrai conviverci perché non sembra essere condizionale.
Se hai un frontend nginx / apache puoi comunque rimuovere l'intestazione con esso (con mod_headers per apache e headers-more per nginx)
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) ->
...
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