Я столкнулся со странной проблемой при использовании промежуточного программного обеспечения csurf для защиты csrf в своем угловом приложении с экспресс-бэкендом.
В основном проблема заключается в том, что если я очищаю файл cookie XSRF-TOKEN в браузере, а затем отправляю запрос, при проверке 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) и угловой (1.4.3). Я вижу, что angular правильно читает cookie на клиенте и правильно устанавливает заголовок. Я также вижу, что заголовок пуст, как и ожидалось, если вы удалите cookie из клиента, а затем отправите запрос.
Поскольку точка останова заставляет его работать, я предполагаю, что здесь происходят какие-то условия гонки? Интересно, видел ли кто-нибудь это поведение или какие-то мысли?