node(express.js)でcsrfに対する対策を施す方法について書いてみる。といっても、express.jsはcsrf対策のためのミドルウェアを提供しているので、その使い方の話。(ここで使っているexpress.jsのバージョンは3.4.8です。)
express.jsのcsrfミドルウェア
express.jsが提供するミドルウェアに、csrf っていうのがあってコレを使うと簡単にcsrf対策ができる。
使い方 - app.js
expressコマンドでアプリケーションを作ると、app.jsというファイルが出来て、この中にアプリケーションやサーバの設定を書くんだけど、その中で次のコードを書く。
// use session support. app.use(express.session()); // use csrf middleware. app.use(express.csrf()); app.use(function(req, res, next) { res.locals._csrf = req.csrfToken(); next(); });前述のこのページにあるとおり、csrfミドルウェアを使うには、session()よりも下に書けってあるので、注意が必要。
使い方 - view
csrfミドルウェアが生成してくれるトークンをformに埋める必要があるので、viewでformを書くときには、
form(action='/some_action', method='form') input(type='hidden', name='_csrf', value='#{_csrf}') :のように、hiddenに_csrfのトークンを埋めておく。(これはテンプレートエンジンにjadeを使った場合の例)
これで、postなリクエストにcsrfトークンが含まれていなかったり、不正なトークンが含まれていると、expressが検出してエラーを上げてくれるようになる。
0 件のコメント:
コメントを投稿