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