我在使用快速后端的角度应用程序中使用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并正确设置 Headers . 如果从客户端删除cookie然后发送请求,我还可以看到标头是预期的空白 .
由于断点使它工作,我假设这里有某种竞争条件?想知道是否有人看到过这种行为或有任何想法 .