Node.js 会话ID cookie是否应该签名?

Node.js 会话ID cookie是否应该签名?,node.js,session-cookies,Node.js,Session Cookies,我正在使用节点库,注意到它需要为会话ID cookie签名指定一个秘密 如果cookie中只存储了会话ID,而没有任何数据,那么对cookie进行签名有什么用 我的理由是,如果有人想要修改会话ID cookie,那么如果会话ID足够长,可以防止暴力攻击,那就没问题了。我遗漏了什么吗?如果只存储会话id,则没有理由对其进行加密。你是对的。 如果在cookie中存储了一些会话数据,则需要加密,而不仅仅是id。 这将阻止用户更改会话数据。会话id cookie是将客户端标识到服务器的任何东西(数字或字

我正在使用节点库,注意到它需要为会话ID cookie签名指定一个秘密

如果cookie中只存储了会话ID,而没有任何数据,那么对cookie进行签名有什么用


我的理由是,如果有人想要修改会话ID cookie,那么如果会话ID足够长,可以防止暴力攻击,那就没问题了。我遗漏了什么吗?

如果只存储会话id,则没有理由对其进行加密。你是对的。 如果在cookie中存储了一些会话数据,则需要加密,而不仅仅是id。
这将阻止用户更改会话数据。

会话id cookie是将客户端标识到服务器的任何东西(数字或字母数字),服务器反过来将通过该会话id/密钥访问的(通常是临时)数据存储在服务器上

关键是,如果cookie将通过HTTP来回传递,那么您是否对其进行了“签名”并不重要。中间的任何人都可以得到你的“签名/加密会话id”,并假装是正确的用户提出进一步的请求。我的意思是,攻击者不必关心加密数据中包含哪些信息,他可以传递完全相同的签名/加密数据,而服务器无法确定这些信息是否来自正确的用户

在这种情况下,你必须弄清楚隐私是否重要,如果是的话,不要想太多,你必须使用HTTPS。如果您明白这并不重要,那么不要浪费您的“处理时间”对会话id进行签名/加密和解密


此答案仅对签名会话id有效。

我也对此提出质疑,我能想到的唯一答案是

  • a) 如果有人(没有正当理由)更改默认会话ID 生成非加密随机会话ID,并对其签名 有助于防止攻击者生成有效的会话ID
  • b) 通过验证会话减少到会话存储的往返 使用签名/HMAC的ID。(我只能想象这是一个问题 用于DoS攻击)

虽然使用良好的会话缓存会消除b)的需要,并且假设库的用户愚蠢到足以更改默认会话ID生成,但这两个原因似乎都是合理的,当大多数用户只使用默认的生成算法时,为了防止自己的愚蠢行为似乎有点过分。

我相信它被签名的原因是不容易猜测。例如,如果有人决定使用整数作为会话id,您可以通过尝试多个数字轻松模拟另一个用户的会话。我相信签名会使更改会话id值客户端无效(即防止篡改)。

这可能会有所帮助:@nicolasccurdy谢谢!读起来很有趣,但这个问题似乎是关于会话cookie,它包含数据,因此不需要服务器端存储。需要签名cookie是有道理的,但在我的例子中,cookie只是存储在服务器上的数据的标识符,因此不容易出现相同的问题。可能是为了防止其他人在用户浏览器中创建假会话cookie(通过XSS或类似的方式)。OP询问对cookie进行签名,不是关于加密。