Проблемы экспресс-проверки csrf (промежуточное ПО csurf) с угловым приложением - PullRequest
0 голосов
/ 14 сентября 2018

Я столкнулся со странной проблемой при использовании промежуточного программного обеспечения 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 из клиента, а затем отправите запрос.

Поскольку точка останова заставляет его работать, я предполагаю, что здесь происходят какие-то условия гонки? Интересно, видел ли кто-нибудь это поведение или какие-то мысли?

...