Как реализовать CSRF, который будет работать в NODEJS и REACT (с redux) без изменения клиента - PullRequest
0 голосов
/ 12 июля 2020

Вот моя конфигурация csurf:

app.use(cookieParser());
const csrfMiddleware = csrf({
  key: '_csrf',
  cookie: true,
  maxAge: 24 * 60 * 60 * 1000,
  httpOnly: true,
  secure: true
});

Вот мое промежуточное ПО:

const csrfTokenCookieMiddleware = (req, res, next) => {
  console.log('REQ-COOKIE-CSRF', req.csrfToken());
  console.log('LOCAL-COOKIE-CSRF', req.cookies._csrf);
  console.log('REQ-BODY-CSRF', req.body._csrf);
  console.log(req.cookies._csrf === req.csrfToken());
  res.locals._csrf = req.csrfToken();
  next();
};
module.exports = csrfTokenCookieMiddleware;

Конфигурация клиента:

Axios.defaults.xsrfHeaderName = 'X-XSRF-TOKEN';
Axios.defaults.xsrfCookieName = '_csrf';
Axios.defaults.withCredentials = true;

Браузеры:

1.
REQ-COOKIE-CSRF 8Sbj56oX-jxGtIG_lkvVJQPibTFj1gH7m0so
LOCAL-COOKIE-CSRF vvDcLC_3AstbX_kZGRJnYmy-

2.
REQ-COOKIE-CSRF brw4FGss-MD6LvucB5Bh_2Npp9yYFeS7OiGE
LOCAL-COOKIE-CSRF vvDcLC_3AstbX_kZGRJnYmy-

И так далее ...

Это ошибка I получить:

ForbiddenError: invalid csrf token
...