質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

CSRF

クロスサイトリクエストフォージェリ (Cross site request forgeries、CSRF)は、 外部Webページから、HTTPリクエストによって、 Webサイトの機能の一部が実行されてしまうWWWにおける攻撃手法です。

Express

ExpressはNode.jsのWebアプリケーションフレームワークです。 マルチページを構築するための機能セットおよびハイブリッドのWebアプリケーションを提供します。

Q&A

0回答

496閲覧

Node.jsのCSRF対策におけるcsurfモジュールについて

fightTT

総合スコア27

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

CSRF

クロスサイトリクエストフォージェリ (Cross site request forgeries、CSRF)は、 外部Webページから、HTTPリクエストによって、 Webサイトの機能の一部が実行されてしまうWWWにおける攻撃手法です。

Express

ExpressはNode.jsのWebアプリケーションフレームワークです。 マルチページを構築するための機能セットおよびハイブリッドのWebアプリケーションを提供します。

0グッド

0クリップ

投稿2019/06/04 07:25

編集2022/01/12 10:55

現在Node.js+ExpressでWebアプリを作成しています。
CSRF対策としてcsurfモジュールを利用しております。

GithubにあるREADMEを参考に記述しておりますが、Expressで開発していることを外部に分からないようにしたいので、Cookieのキーをデフォルトの'_csrf'から変更したいのですが、__403 invalid csrf token__となってしまい、うまく動作しません。

Routerモジュール

Jaavascript

1'use strict'; 2const express = require('express'); 3const router = express.Router(); 4const cookieParser = require('cookie-parser'); 5const bodyParser = require('body-parser'); 6const csrf = require('csurf'); 7 8// csrfProtection = csrf({ cookie: true })だと 9// デフォルトの{ key: '_csrf', path:'/' }が適用される 10const csrfProtection = csrf({ cookie: { key: 'my_csrf', path: '/' } }); 11const parseForm = bodyParser.urlencoded({ extended: false }) 12 13router.use(cookieParser()); 14 15router.get('/form', csrfProtection, function (req, res) { 16 // pass the csrfToken to the view 17 res.render('send', { csrfToken: req.csrfToken() }) 18}) 19 20app.post('/process', parseForm, csrfProtection, function (req, res) { 21 res.send('data is being processed') 22})
Viewテンプレート

pug

1form(method="post", action="/schedules").my-3 2 // - != は内容をエスケープせずに出力する 3 input(type="hidden" name="my_csrf" value!=csrfToken)

そもそも、デフォルトのキー名'_csrf'でも問題ないのでしょうか?
デフォルトのキー名では問題なく動作し、さらにoption指定で、デフォルトの値と同じものを指定した場合も問題なく動きます。
キー名を変更した場合のみエラーが生じています。

javascript

1// デフォルト指定では問題なし 2csrfProtection = csrf({ cookie: true }) 3// オプション指定で、デフォルトの値と同じものを記述しても動作する 4const csrfProtection = csrf({ cookie: { key: '_csrf', path: '/' } }); 5// キー名を変更した場合のみinvalid csrf tokenとなる 6const csrfProtection = csrf({ cookie: { key: 'my_csrf', path: '/' } });

こちら、解決策や参考になる文献等ご教示いただければ幸いです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問