Expressの5行でできるCSRF対策
特殊なウィルス怖いですね.今後CSRF対策してないフォームを公開したらウイルス作成罪で逮捕されるかもしれません. NodeのWEBフレームワークExpress(が使ってるミドルウェアフレームワークのConnect)では数行追加するだけで,セッション毎の固定トークン方式でCSRF対策ができるので紹介する.
基本的にはapp.use(express.session());
とapp.use(app.router);
の間に2つミドルウェアを追加し,ビューのformに隠し項目でトークンを追加するだけである.
// app.js ... app.use(express.session()); app.use(express.csrf()); // 追加 app.use(function(req, res, next) { // 追加 res.locals._csrf = req.session._csrf; next(); }); app.use(app.router); ...
app.use(express.csrf());
の部分はconnectのmiddleware/csrf.js参照.
req.session._csrf
にトークンが追加され,POSTメソッド等でtokenが一致してるかチェックされるようになる.
res.locals._csrf = req.session._csrf;
で_csrfをビューから参照できるようにしている.
後はビューのフォームにトークンを追加する.
// index.jade ... form(method='post') legend= 'CSRF対策済みフォーム' input(type='text', name='text') input(type='hidden', name='_csrf', value=_csrf) // 追加 input(type='submit') ...