如何在 express,nodejs 的所有视图中传递 csrf 令牌
how to pass csrf token in all views in express, nodejs
我有一个使用 ExpressJS 构建的 NodeJS 应用程序。经过安全审查后,我被建议对所有表单和 ajax 提交实施 CSRF。为此,我使用了 csurf 包。为此,我们需要在每个表单页面中传递 CSRF 令牌,然后 return 它与表单提交数据一起传递。
首先,我尝试对包含表单的页面单独执行此操作。但后来我意识到我的页眉中有一个搜索表单,它出现在所有页面上。现在,有什么方法可以将 CSRF 令牌传递给我的所有视图,而无需为每个请求显式传递它。这是我用于呈现表单页面的通用代码。我使用 Jade/Pug 进行渲染:
router.get('/createcampaign', checkUserSession, middleWare2, middleware3, function(req, res){
var pageInfo = {};
pageInfo.title = 'Create New Campaign';
pageInfo.projects = req.projects;
pageInfo.session = req.session;
pageInfo.bodyid = 'createcampaign';
pageInfo.project_id = req.flash('project_id');
pageInfo.bodyclass = 'bluebody';
pageInfo.account = req.account;
pageInfo.grammars = req.grammars;
pageInfo.csrfToken = req.csrfToken; //Here I pass csrfToken to view
res.render( 'users/createcampaign', pageInfo );
});//createcampaign get route
如您所见,我需要将 csrfToken 与视图上下文对象一起传递。 如何全局传递它以便传递给所有视图?
此外,在所有页面上发送此 csrfToken 并在需要的地方使用它是否安全?
谢谢。
create a middleware that will pass a token to the token property to the request object
var csrf = require('csurf')
app.use(csrf())
app.use(function(request,response,next){
app.locals._token = request.csrfToken()
next()
})
and you can use the variable _token in your view
我有一个使用 ExpressJS 构建的 NodeJS 应用程序。经过安全审查后,我被建议对所有表单和 ajax 提交实施 CSRF。为此,我使用了 csurf 包。为此,我们需要在每个表单页面中传递 CSRF 令牌,然后 return 它与表单提交数据一起传递。
首先,我尝试对包含表单的页面单独执行此操作。但后来我意识到我的页眉中有一个搜索表单,它出现在所有页面上。现在,有什么方法可以将 CSRF 令牌传递给我的所有视图,而无需为每个请求显式传递它。这是我用于呈现表单页面的通用代码。我使用 Jade/Pug 进行渲染:
router.get('/createcampaign', checkUserSession, middleWare2, middleware3, function(req, res){
var pageInfo = {};
pageInfo.title = 'Create New Campaign';
pageInfo.projects = req.projects;
pageInfo.session = req.session;
pageInfo.bodyid = 'createcampaign';
pageInfo.project_id = req.flash('project_id');
pageInfo.bodyclass = 'bluebody';
pageInfo.account = req.account;
pageInfo.grammars = req.grammars;
pageInfo.csrfToken = req.csrfToken; //Here I pass csrfToken to view
res.render( 'users/createcampaign', pageInfo );
});//createcampaign get route
如您所见,我需要将 csrfToken 与视图上下文对象一起传递。 如何全局传递它以便传递给所有视图?
此外,在所有页面上发送此 csrfToken 并在需要的地方使用它是否安全?
谢谢。
create a middleware that will pass a token to the token property to the request object
var csrf = require('csurf')
app.use(csrf())
app.use(function(request,response,next){
app.locals._token = request.csrfToken()
next()
})
and you can use the variable _token in your view