Không thể thoát khỏi tiêu đề X-Powered-By: Express


168

Tôi đang chạy một máy chủ trên nodejs với express. Tôi dường như không thể thoát khỏi tiêu đề:

X-Powered-By:Express

Tôi đã tự hỏi nếu có cách nào để thoát khỏi tiêu đề này hoặc tôi phải sống với nó?


@alessioalex câu hỏi này có nhiều lượt xem hơn (vì bất kỳ lý do gì nó phổ biến hơn), vì vậy, hãy tạo ra bản sao khác của câu hỏi này để thay thế.
Alexei Levenkov

Câu trả lời:


247

Trong Express> = 3.0.0rc5:

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

Đây là một phần mềm trung gian đơn giản loại bỏ tiêu đề trong các phiên bản trước của Express:

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

16
Tôi đã phải đặt nó trước khi app.use(app.router);nó hoạt động.
Pavel Hlobil

2
Tương tự như app.set ('x-Powered-by', false);
quấy rối

1
Không làm việc trong 4.15.2. @harrisunderwork giải pháp sử dụng app.set()đã làm thủ thuật.
Daniel W.

54

Chỉ cần cõng theo câu trả lời của rjack, bạn cũng có thể (tùy chọn) chỉ cần thay đổi (đặt) tiêu đề X-Powered-by thành một cái gì đó thú vị hơn / tùy chỉnh như thế này:

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

50

Kể từ Express v3.0.0rc5, hỗ trợ vô hiệu hóa X-Powered-Bytiêu đề được tích hợp sẵn trong:

var express = require('express');

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


10

Đây là một phần mềm trung gian tiện dụng mà bạn có thể thả vào để trao đổi 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

Đặt X-Powered bởi trong trường hợp này sẽ ghi đè 'Express' mặc định, do đó bạn không cần phải tắt và đặt giá trị mới.


3

Có lẽ điều này có thể rõ ràng với những người dùng Express dày dạn hơn, nhưng chỉ điều này hiệu quả với tôi:

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

2

Để ẩn, X-Powered By bạn có thể sử dụng mũ bảo hiểm Thư viện Node .js .

Liên kết cho đó là mũ bảo hiểm

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

Bạn sẽ bao gồm cả một thư viện cho việc này?
Moha lạc đà toàn năng

vâng, chúng tôi phải sử dụng thư viện mũ bảo hiểm. Nếu bạn đang sử dụng fremework expressjs thì bạn có thể tránh thư viện bằng mã này app.disable ("x-Powered-by");
arjun kori

2

Đôi khi câu trả lời ở đầu không hoạt động. Đây là trường hợp của tôi. Tôi có Express 4.17.1 và không ai trả lời không hoạt động. Vì vậy, tôi đã phát minh ra giải pháp của riêng mình:

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

Đã làm việc cho Express phiên bản 4.16.3. Không có giải pháp khác làm việc.
Xyroid

2

Không ai trong số các công nhân giải pháp tiêu chuẩn cho tôi. Sau nhiều lần tìm kiếm, tôi phát hiện ra rằng chúng tôi đã sử dụng một tệp tuyến đường nơi một thể hiện mới được bắt đầu, sau đó được thêm vào đầu tiên bằng cách sử dụng app.use. Chỉ dành cho các tuyến đường trong thể hiện mới này, tiêu đề X-Powered-By đã có mặt.

Quan điểm đơn giản về vấn đề:

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

Giải pháp đơn giản là tạo một express.Router mới thay vì toàn bộ.

const moreRoutes = express.Router();

1

Đọc mã https://github.com/visionmedia/express/blob/master/lib/http.js#L72 khiến tôi nghĩ rằng bạn sẽ phải sống với nó vì nó dường như không có điều kiện.

Nếu bạn có nginx / apache frontend, bạn vẫn có thể xóa tiêu đề với nó (với mod_headers cho apache và headers-more cho nginx)


1
Tôi nghĩ rằng cách tiếp cận máy chủ web là tốt nhất. Điều này hỗ trợ một thực hành tốt nhất.
Đaminh

0

removeHeader sẽ chỉ hoạt động trong phần mềm trung gian tuyến đường, ví dụ về coffeescript

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

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

0

Không cái nào trong số này hoạt động với tôi, ngoại trừ cái này (bạn cần thêm một tham số khác):

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

Tôi đang sử dụng Express ^ 4.17

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.