会话ID cookie应该签名吗?

时间:2015-03-02 05:40:55

标签: node.js session-cookies

我正在使用节点库https://github.com/expressjs/session并注意到它需要指定一个秘密来签署会话ID cookie。

如果只是会话ID存储在cookie中,而不是任何数据,那么签署cookie会有什么用?

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

4 个答案:

答案 0 :(得分:2)

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

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

两者看起来都是有道理的,但是使用良好的会话缓存会否定b)的需要,并假设你的图书馆用户愚蠢到足以改变默认的会话ID生成,似乎有点安全防范当大多数用户只使用默认生成算法时,他们自己的愚蠢。

答案 1 :(得分:1)

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

答案 2 :(得分:1)

session_id cookie是标识服务器客户端的任何东西(数字或字母数字),它反过来将(通常是临时的)数据存储在通过此session_id / key访问的服务器上。

关键是,如果cookie将通过HTTP传递和返回,那么您是否已经签署了#34;是不是。任何中间人都可以获得#34;签名/加密的session_id"并提出假装成为合适用户的进一步请求。我的意思是,这个攻击者不必关心加密数据中的哪些信息,他可以传递完全相同的签名/加密数据,而服务器无法确定它是否真的来自右边用户。

在这种情况下,你必须弄清楚隐私是否重要,如果是这样,不要想太多,你必须使用HTTPS。如果您了解它并不那么重要,请不要浪费您的处理时间"签名/加密和解密您的会话ID。

此答案仅对已签名的session_id有效。

答案 3 :(得分:0)

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