LoginSignup
31
32

More than 5 years have passed since last update.

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

Posted at

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

31
32
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
31
32