Node.js+ExpressにおいてCSRF対策を行うための実装
Node.js+Expressの構成においてCSRF対策を行うための実装メモです。
CSRF対策用のミドルウェアを追加
ExpressではCSRF対策のためのミドルウェアを提供しています。
まずはこれをapp.useに追加します。
app.configure(function () { // 省略 app.use(express.csrf()); // express.csrfを追加 // 省略 });
tokenを生成しレスポンスに設定するための関数を作成
つづいて、tokenを生成しレスポンスに設定させてやるための関数を作成します。
この関数を呼び出すことによりビューにtokenを埋め込むことが可能となります。
function csrf(req, res, next) { res.locals.csrftoken = req.csrfToken(); // ↓非推奨な実装。 // res.locals.csrftoken = req.session._csrf; next(); }
sessionより_csrfプロパティを取得する実装も可能ですが、この実装は現在では非推奨のようです。Expressがログにて警告をだします。
ルーティングの設定箇所にtoken生成関数の呼び出しを追加する
app.get('/entry' csrf, // token生成関数の呼び出しを追加 entry.index);
ビューにtokenを埋め込む
最後にビューにtokenを埋め込んであげます(下記コード実装例はejs)。
このとき、nameは"_csrf"としてあげてください。
<form method="POST" action="/entry"> <input type="hidden" name="_csrf" value="<%= csrftoken %>"> <input type="submit" id="submit-button" value="投稿する"> </form>
以上により、CSRF対策の実装が可能となります。
対策がちゃんと効いていることを確認するため、tokenの値を書き換えてPOSTしてみるとエラーが発生するはずです。
エラー発生時のハンドリングについては以下の記事が詳しいです。
Future is now: [node.js, express]express で CSRF 対策
おすすめ参考文献
Node.js+Expressの構成の使い方を解説してくれます。初めてNode.jsやExpressに取り組む方にオススメです。
はじめてのNode.js -サーバーサイドJavaScriptでWebアプリを開発する-
- 作者: 松島浩道
- 出版社/メーカー: ソフトバンククリエイティブ
- 発売日: 2013/03/15
- メディア: 大型本
- クリック: 15回
- この商品を含むブログ (5件) を見る