这是从客户端设置服务器端 cookie 的良好/安全方法吗?

Is this a good / secure way to set server side cookies from client

本文关键字:安全 方法 客户端 设置 cookie 服务器端      更新时间:2023-09-26

我正在使用一个名为reactjs的单个应用程序框架,我遇到的问题是设置httpOnly cookie,因为它们无法从客户端设置/读取,我需要找出一种方法如何使用express。

我想出的一个想法是向像/cookie:data这样的路由发出 post 请求,其中数据是需要存储在 cookie 中的令牌值,因此:

app.post('/cookie:data', function(req, res) {
  // Set cookie here
  res.send(200)
})

我犹豫的问题是令牌包含用于保护 API 的唯一用户标识符,我不确定我是否通过以这种方式设置 cookie 来公开这一点。

或者,与其使用:data而是弄清楚如何从 post 请求中获取数据(json 对象)会很有帮助

编辑:我能想到的一个问题是任何人都可以发布到这条路线并设置不同的 cookie?保护它的方法是什么?

编辑2:这是我用来代理 api 调用的快速设置(仅与澄清评论相关)

  app.use('/api', function (req, res) {
    let url = config.API_HOST + req.url
    req.pipe(request(url)).pipe(res)
  })

假设您要将所有以 /api 开头的请求代理给第三方,但 /api/users 除外,您希望"手动"执行,因为它返回您需要的令牌:

app.post('/api/users', function(req, res) {
  let url        = config.API_HOST + req.url;
  let apiRequest = request.post(url, function(err, response, body) {
    // Responses are just examples, you should tailor them to your situation
    if (err) {
      return res.sendStatus(500);
    } else if (response.statusCode !== 200) {
      return res.sendStatus(response.statusCode);
    } else {
      res.cookie('token', body).send('OK');
    }
  });
  req.pipe(apiRequest);
})
app.use('/api', function (req, res) {
  let url = config.API_HOST + req.url
  req.pipe(request(url)).pipe(res)
})