ぶれすとつーる

だいたいjavascript

X-Powered-By:Express

Expressで作ったサイトを動かすとレスポンスヘッダに

X-Powered-By:Express

こんなのつきます。

俺のサイトはNodeだぜ フフンみたいな人はいいんですがいつか脆弱性がみつかったときにしめしめって思われるのもなんだか怖いので消すようにしました。

Express3系ならこんな感じで簡単に消せます。

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


Express2系の人はres.removeHeaderを使えばシンプルに消せます。
こんなミドルウェア作ってルーティングミドルウェアの呼出し前に差し込みすればいい感じかと。

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


ちなみにこれが実装されてるところはこの辺(express3.2)

https://github.com/visionmedia/express/blob/3.2.0/lib/application.js#L48

app.defaultConfiguration = function(){
  // default settings
  this.enable('x-powered-by'); // <-初期値設定
  this.set('env', process.env.NODE_ENV || 'development');
  this.set('subdomain offset', 2);
  debug('booting in %s mode', this.get('env'));

  // implicit middleware
  this.use(connect.query());
  this.use(middleware.init(this)); // <- ここで実設定
...

https://github.com/visionmedia/express/blob/3.2.0/lib/middleware.js#L21

exports.init = function(app){
  return function expressInit(req, res, next){
    req.app = res.app = app;
    if (app.enabled('x-powered-by')) {
      res.setHeader('X-Powered-By', 'Express'); // <-ここ
    }
    req.res = res;
    res.req = req;
    req.next = next;
    req.__proto__ = app.request;
    res.__proto__ = app.response;

    res.locals = res.locals || utils.locals(res);

    next();
  }
};

こんな感じで書かれてるのでapp.disabledでやればきえるってすぐわかってよいですね。