将CSRF令牌公开给位于其他域上的客户端

问题描述 投票:0回答:1

我正在使用模块https://www.npmjs.com/package/csurf保护我的公共路线,以防跨站点请求伪造。服务器和客户端托管在两个不同的域上,因此我无法使用直接方式将生成的令牌传递给客户端。

我现在在服务器上创建了两个不同的终结点,/ csrfToken在头中发送生成的令牌和csrf cookie,如果正确,路由/ register必须验证给定的令牌和csrf cookie。

const csrfProtection = csrf({
  cookie: {
    maxAge: 900
  }
})

router.get('/csrfToken', csrfProtection, async (req, res, next) => {
  res.json({ token: req.csrfToken() });
});

router.post(
  '/register',
  csrfProtection,
  async (req, res, next) => {
    return res.send('user registered');
  }
);

我现在面临的问题是,端点/ csrfToken对所有公共请求都是开放的,每个人都可以向它发出请求。因此,有没有办法我可以在不将凭证暴露给客户端的情况下获得令牌?

我正在使用nuxt / vue,如果那与解决我的问题有关。

javascript express vue.js csrf nuxt.js
1个回答
0
投票

由于您将令牌公开为JSON,因此大概是使用Ajax发出这些请求。

只需确保您的Access-Control-Allow-Origin标头仅允许您的网站从中读取数据。

然后,尽管任何人都可以通过非Ajax HTTP客户端向端点发出请求,但由于他们的令牌与用户Cookie中的令牌不匹配,因此它无法使用它进行CSRF攻击。] >

© www.soinside.com 2019 - 2024. All rights reserved.