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?


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

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

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


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.


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

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

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

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


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

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

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.