当我在具有快速后端的角度应用程序中使用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,然后发送请求,则标头为空。
既然断点可以正常工作,我假设这里正在发生某种竞赛情况?想知道是否有人看到过这种行为或有任何想法。