Tidak dapat menghilangkan tajuk X-Powered-By: Express

168

Saya menjalankan server di nodejs dengan express. Sepertinya saya tidak bisa menghilangkan tajuk:

X-Powered-By:Express

Saya bertanya-tanya apakah ada cara untuk menyingkirkan tajuk ini atau apakah saya harus hidup dengannya?

tyronegcarter
sumber
@alessioalex pertanyaan ini memiliki lebih banyak tampilan (untuk alasan apa pun itu lebih populer), jadi mari kita buat duplikat lain dari ini sebagai gantinya.
Alexei Levenkov

Jawaban:

247

In Express> = 3.0.0rc5:

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

Berikut adalah middleware sederhana yang menghapus header di versi Express sebelumnya:

app.use(function (req, res, next) {
  res.removeHeader("x-powered-by");
  next();
});
Giacomo
sumber
16
Saya harus meletakkannya sebelum app.use(app.router);berfungsi.
Pavel Hlobil
2
Sama seperti app.set ('x-powered-by', false);
harrisunderwork
1
Tidak berhasil 4.15.2. Solusi @harrisunderwork menggunakan app.set()melakukan trik.
Daniel W.
54

Hanya untuk membonceng jawaban rjack, Anda juga bisa (secara opsional) hanya mengubah (mengatur) header X-powered-by menjadi sesuatu yang jauh lebih keren / ubahsuaian seperti ini:

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

Pada Express v3.0.0rc5, dukungan untuk menonaktifkan X-Powered-Byheader adalah bawaan :

var express = require('express');

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

Dari sumbernya ( http://expressjs.com/en/api.html#app.set ). Di Express 4.X cukup atur aplikasi menggunakan garis di bawah ini;

app.set('x-powered-by', false) // hide x-powered-by header!
efkan
sumber
10

Berikut ini adalah middleware berguna yang dapat Anda singgahi untuk menukar 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

Mengatur X-Powered oleh dalam hal ini akan menimpa default 'Express', sehingga Anda tidak perlu menonaktifkan DAN mengatur nilai baru.

papercowboy
sumber
3

Mungkin ini jelas bagi pengguna Express yang lebih berpengalaman, tetapi hanya ini yang berhasil bagi saya:

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

Terkadang jawaban di atas tidak berhasil. Ini kasus saya. Saya memiliki Express 4.17.1 dan tidak ada satu jawaban pun yang tidak berfungsi. Jadi saya menemukan solusi saya sendiri:

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();
});
1 naluri
sumber
Bekerja untuk Express versi 4.16.3 juga. Tidak ada solusi lain yang berhasil.
Xyroid
1
bekerja untuk saya juga terima kasih!
Fernix
2

Untuk Menyembunyikan, X-Powered By Anda dapat menggunakan helm Node .js Library .

Tautan Untuk itu adalah helm

var helmet = require('helmet');
app.use(helmet.hidePoweredBy());
arjun kori
sumber
Apakah Anda menyertakan seluruh perpustakaan untuk ini?
Moha unta maha kuasa
ya kita harus menggunakan perpustakaan helm. Jika Anda menggunakan fremework expressjs maka Anda dapat menghindari perpustakaan dengan kode aplikasi ini. Disable ("x-powered-by");
arjun kori
2

Tidak ada pekerja solusi standar untuk saya juga. Setelah banyak pencarian saya menemukan bahwa kami menggunakan file rute tempat instance express baru dimulai, yang kemudian ditambahkan ke yang pertama dengan menggunakan app.use. Hanya untuk rute dalam instance ekspres baru ini header X-Powered-By hadir.

Pandangan sederhana tentang masalah:

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

Solusi hanya untuk membuat ekspres baru. Rute bukannya seluruh contoh.

const moreRoutes = express.Router();
Jacco Mol
sumber
1

Membaca kode https://github.com/visionmedia/express/blob/master/lib/http.js#L72 membuat saya berpikir bahwa Anda harus hidup dengan itu karena sepertinya tidak kondisional.

Jika Anda memiliki frontend nginx / apache Anda masih dapat menghapus header dengan itu (dengan mod_headers untuk apache dan header-lebih untuk nginx)

hellvinz
sumber
1
Saya pikir pendekatan server web adalah yang terbaik. Ini mendukung praktik terbaik.
Dominic
0

removeHeader hanya akan berfungsi di rute middleware, contoh coffeescript

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

app.get '/posts', fix_headers, (req, res, next) ->
  ...
Dejan Ranisavljevic
sumber
0

Semua ini tidak berfungsi untuk saya, kecuali ini (Anda perlu menambahkan parameter lain):

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

Saya menggunakan Express ^ 4.17

László Matuska
sumber