CSRFトークンのサポートを追加して送信を安全に保つために、マルチパートフォームで問題が発生しました。私はapp.js
ファイルのreq
オブジェクトにCSRFの世代をグローバルに設定しており、マルチパート以外の他のタイプのWebフォームには問題がありません。私はこれがmulterの一般的な問題のどこにあるのかを読んで、CSRFの配置とmulterの設定のどちらに関連するのか、またはそれを送信時の問い合わせとして添付してください。私はセキュリティ上の理由からクエリを添付するというアプローチに慣れておらず、他のフォームのように実行するようにセットアップを修正する方法を見たいと思っています。CSRFとMulter - 無効なCSRFトークンエラー
エラーメッセージ:
ForbiddenError: invalid csrf token
at csrf (/Users/user/Desktop/Projects/node/test-app/node_modules/csurf/index.js:112:19)
app.js:
var csrf = require('csurf');
....
//Set CSRF for Form Tokens
app.use(csrf());
app.use(function(req, res, next){
res.locals._csrf = req.csrfToken();
next();
});
ルート:
var upload = multer({
storage: multerS3({
s3: s3,
bucket: options.Bucket,
contentType: multerS3.AUTO_CONTENT_TYPE,
acl: options.ACL,
key: function(req, file, cb){
var fileNameFormatted = file.originalname.replace(/\s+/g, '-').toLowerCase();
cb(null, req.user.organizationId + '/' + uploadDate + '/' + fileNameFormatted);
}
}),
fileFilter: function(req, file, cb){
if(!file.originalname.match(/\.(jpg|jpeg|png|gif|csv|xls|xlsb|xlsm|xlsx)$/)){
return cb('One of your selected files is not supported', false);
}
cb(null, true);
}
}).array('fileUpload', 5);
appRoutes.route('/blog/create')
.get(function(req, res){
res.render('pages/app/blog-create.hbs',{
errorMessage: req.flash('error'),
csrfToken: req.csrfToken()
});
})
.post(function(req, res){
upload(req, res, function(err){
if(err){
req.flash('error', err);
res.redirect(req.get('referer'));
return;
}
models.Blog.create({
date: req.body.date,
title: req.body.title,
content: req.body.content,
userId: req.user.userId
}).then(function(){
req.flash('info', 'Blog was successfully created.');
res.redirect('/app');
});
})
});
ビュー:
<form action="/app/blog/create" method="post" enctype="multipart/form-data" id="blogSubmission">
<input type="hidden" name="_csrf" value="{{csrfToken}}">
....
</form>