Angular App的Express CSRF(Csurf中间件)验证问题

时间:2018-09-14 15:03:56

标签: javascript node.js angular express csrf

当我在具有快速后端的角度应用程序中使用csurf中间件进行csrf保护时,遇到一个奇怪的问题。

基本上,问题是,如果我在浏览器中清除了XSRF-TOKEN cookie,然后发送请求,则csurf验证不会引发任何错误。奇怪的是,如果我在验证步骤上切换一个断点并逐步执行它,它应该正确地引发错误。在下面的代码中,我在放置断点的地方添加了注释,以使其正常工作:

app.use(csrf());
app.use(function (req, res, next) {
  // BREAKPOINT HERE TO MAKE IT WORK
  res.cookie('XSRF-TOKEN', req.csrfToken());
  return next();
});
app.use(function (err, req, res, next) {
  if (err.code !== 'EBADCSRFTOKEN') {
    return next(err);
  }
  req.logOut();
  req.clearCookie('XSRF-TOKEN');
  res.status(401).redirect('/login');
  return;
});

我正在使用Express(4.16.3)和csurf(1.8.2)和angular(1.4.3)。我可以看到angular正在正确读取客户端上的cookie并正确设置了标题。我还可以看到,如果您从客户端删除cookie,然后发送请求,则标头为空。

既然断点可以正常工作,我假设这里正在发生某种竞赛情况?想知道是否有人看到过这种行为或有任何想法。

0 个答案:

没有答案