首页 文章

csurf:如何将csrf令牌传递给客户端而不将其插入模板视图?

提问于
浏览
1

我没有使用像把手或视图这样的模板语言(我捆绑了客户端代码),因此我很难弄清楚如何在不将其传递到视图的情况下发送csrf令牌 .

几乎所有的例子都像这样注入令牌服务器端:

app.get('/form', csrfProtection, function(req, res) {
  // pass the csrfToken to the view
  res.render('send', { csrfToken: req.csrfToken() })
})

我不完全确定注入是否是安全机制正常工作所必需的 .

注意:我将cookie选项设置为true,并且在csurf之前调用cookie解析器 - 但我仍然得到 ForbiddenError: invalid csrf token (我相信它发生是因为我发送了_csrf秘密作为令牌,但我猜它发送了秘密,_csrf,我们还必须发送csrf令牌 .

题:

是否有其他可接受的方式将csrf令牌发送到客户端(例如header,cookies,res.body等)?

1 回答

  • 4

    你可以使用cookies . 确保在路线之前定义以下代码 . 像这样做:

    app.use((req, res, next)=> {
    
      var token = req.csrfToken();
      res.cookie('XSRF-TOKEN', token);
      res.locals.csrfToken = token;
    
      next();
    });
    
    app.post('/someroute', (req, resp)=>{
    
    //..processing something...
    
    })
    

    这个whay你将在客户端使用生成的令牌获得一个cookie . 此令牌将针对每个请求进行更新 . 要将此令牌添加到ajax请求,您只需要读取cookie并将令牌传递给请求 . 例如使用axios:

    axios.defaults.headers.common['x-csrf-token'] = readCookie('XSRF-TOKEN');
    axios.post('/someroute', {somedata})
    

相关问题