Express
nodejs
セキュリティ

【express4.x】セキュリティ対策最初の一歩

More than 3 years have passed since last update.


CSRF対策


luscaモジュールをインストールする

npm install --save lusca


app.jsで使用を宣言


app.js

var express = require('express');

var session = require('express-session');
var app = express();
var csrf = require('lusca').csrf();

app.use(lusca.csrf());



フォームにcsrfトークンを埋め込む

form(role="form" action="/" method="post")

input(type='hidden' name='_csrf' value=_csrf)

これでフォーム送信時にcsrfトークンのチェックが行われる。

ajax使用時は_csrfの値を取得して、送信データ内に含めること

var _csrf = $('input[name=_csrf]').val();

$.ajax({
type: 'POST',
url: '/',
data: {
_csrf: _csrf
}
});

これをしとかないとトークンエラーで弾かれます。


httpヘッダの設定


helmetモジュールを使う

helmetはhttpヘッダの設定に関する複数のミドルウェアの集合体です

詳細はリンク先を確認してください。

npm install --save helmet


app.js

var express = require('express');

var helmet = require('helmet');
var app = express();

app.use(helmet());


これだけで9つのhttpヘッダが設定されるらしいです。スゴイ…!


X-Powered-Byヘッダの無効化

helmetを使わない場合もこいつだけは無効化することが推奨されています。

helmetを使えば自動的に無効化されます。


app.js

var express = require('express');

var app = express();

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



セッションの設定

暗号化とcookie関係のオプションを設定しておく

app.use(express.session({

secret: 'some secret that now one knows',
key: 'sessionId',
cookie: {
httpOnly: true,
secure: true
}
}));


バリデーションを行う

expressで開発するならexpress-validator一択かと

使い方も分かりやすいし、カスタムバリデーションを追加しやすいのも個人的にはいい感じです。

他にも色々ありますが、全部書ききるのは難しそうなので下記リンク先を見ていただければと思います。

参考

- http://www.softwaresecured.com/2015/04/08/secure-your-js-express-code/

- http://expressjs.com/ja/advanced/best-practice-security.html