express 4.x 系にて、CSRF対策を行う方法について、試行錯誤したので、結果のみをシェア
必要なnpmライブラリのインストール
npm install cookie-parser --save npm install express-session --save npm install csurf --save
app.js
まず以下のようにrequireを使用してnpmライブラリを呼び出す.
var express = require('express'), app = express(), post = require('./routes/post'); var cookieParser = require('cookie-parser'); var session = require('express-session'); var csrf = require('csurf');
appに紐づけmiddlewareとして使用できるようにする.
//csrf app.use(cookieParser('keyboard cat')); app.use(session({ resave: true, saveUninitialized: true, secret: 'rAnd0m', cookie: {maxAge : 60000} })); app.use(csrf({cookie: false})); app.use(function(req, res, next){ res.locals.csrftoken = req.csrfToken(); next(); });
index.ejs
以下のように、<input type="hidden" name="_csrf" value="<%= csrftoken %>">
とすることで、
csrf埋め込み処理をform内に埋め込むことが出来る.
<form method="post" action="/posts/<%= i %>"> <input type="submit" value="del"> <input type="hidden" name="_csrf" value="<%= csrftoken %>"> </form>