Expressのセキュリティ設定

helmetモジュールでHTTPに於ける脆弱性となるヘッダを取り除く

対応前の確認

  • プロジェクトの生成とExpressに必要なnpmパッケージのインストール
$ express express-helmet
$ cd express-helmet/
$ npm install
  • サーバーの起動
$ DEBUG=express-hlmet:* PORT=8000 npm start

デベロッパーツール→Network→再読込み→localhost選択→Headersタブを見ると、
X-Powered-By:Expressと書かれており、このWebサービスがExpressで開発されていることが分かってしまう。
もしExpressに脆弱性があるとわかったときに攻撃対象にされる危険性がある。
このためX-Powered-Byというヘッダは送信しないほうが安全。

helmetのインストール

$ npm install helmet --save

app.jsの修正

  • モジュールの読み込みとappオブジェクトのuse関数でhelmetを使うようにする
var express = require('express');
var path = require('path');
var favicon = require('serve-favicon');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
+var helmet = require('helmet');

var index = require('./routes/index');
+var users = require('./routes/users');

対応後の確認

  • サーバー起動
$ DEBUG=express-hlmet:* PORT=8000 npm start

デベロッパーツール→Network→再読込み→localhost選択→Headersタブ
X-Powered-By:Expressが消える

まとめ

フレームワークによって自分で実装しなくて済む