Moh*_*waj 1 javascript forms csrf node.js express
我有一个使用 ExpressJS 构建的 NodeJS 应用程序。经过安全审查后,我被建议对所有表单和 ajax 提交实施 CSRF。为此,我使用了csurf包。为此,我们需要在每个表单页面中传递 CSRF 令牌,然后将其与表单提交数据一起返回。
首先,我尝试对包含表单的页面单独执行此操作。但后来我意识到我的页眉中有一个搜索表单,它出现在所有页面上。现在,有什么方法可以将 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
Run Code Online (Sandbox Code Playgroud)
如您所见,我需要将 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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3029 次 |
| 最近记录: |