Javascript 向位于不同域上的客户端公开csrf令牌

Javascript 向位于不同域上的客户端公开csrf令牌,javascript,express,vue.js,csrf,nuxt.js,Javascript,Express,Vue.js,Csrf,Nuxt.js,我正在使用该模块保护我的公共路线,防止跨站点请求伪造。服务器和客户端托管在两个不同的域上,因此我不能使用直接方式将生成的令牌传递给客户端 我现在在服务器上创建了两个不同的端点,/csrfToken正在发送生成的令牌和头中的csrf cookie,并且路由/寄存器必须验证给定的令牌和csrf cookie是否正确 const csrfProtection = csrf({ cookie: { maxAge: 900 } }) router.get('/csrfToken', cs

我正在使用该模块保护我的公共路线,防止跨站点请求伪造。服务器和客户端托管在两个不同的域上,因此我不能使用直接方式将生成的令牌传递给客户端

我现在在服务器上创建了两个不同的端点,/csrfToken正在发送生成的令牌和头中的csrf cookie,并且路由/寄存器必须验证给定的令牌和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');
  }
);
我现在面临的问题是endpoint/csrfToken对所有公共请求都是开放的,每个人都可以向它发出请求。那么,有没有一种方法可以在不向客户端公开凭据的情况下获取令牌


我使用的是nuxt/vue,如果这与解决我的问题相关的话。

因为您将令牌公开为JSON,所以您可能是在使用Ajax发出这些请求

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


然后,尽管任何人都可以通过非Ajax HTTP客户端向端点发出请求,但它将无法使用它执行CSRF攻击,因为它们的令牌与用户cookie中的令牌不匹配。

是的,我正在使用Ajax进行请求。我已经在节点:
app.use(cors({Origin:'http://localhost:3000“,凭据:true}”)所以基本上每个人都可以向我的应用程序发出请求,例如通过postman(我假设它是一个非Ajax HTTP客户端),但是,当有人试图进行csrf攻击时,他们必须始终在Ajax HTTP客户端上?@ProV-csrf攻击涉及第三方说服经过身份验证的用户的浏览器向服务器发出有害的请求。如果有CSRF防御措施,他们在不知道与用户cookie中的CSRF令牌相匹配的CSRF令牌的情况下无法做到这一点。如果他们使用Postman,他们将获得自己的令牌,但它与其他用户不匹配。好的,如果我不想额外说明客户端没有过度使用他的令牌来创建对我端点的大量请求?你建议用这种包装吗