2015-03-02 35 views
1

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

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

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

+0

这可能会有帮助:http://stackoverflow.com/a/3240420/406249 – 2015-03-02 06:25:40

+1

@NicolasMcCurdy谢谢!有趣的是阅读,但这个问题似乎是关于包含数据的会话cookie,因此不需要服务器端存储。这对于需要签名的cookie是有意义的,但在我的情况下,cookie只是存储在服务器上的数据的标识符,所以它不容易出现相同的问题。 – countunique 2015-03-02 06:40:40

+0

也许是为了防止他人在用户的浏览器中创建假的会话cookie(通过XSS或类似的东西)。 – 2015-03-02 06:46:20

回答

0

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

0

session_id cookie是标识客户端到服务器的任何东西(数字或字母数字),服务器又通过session_id/key存储服务器上的数据(通常是临时数据)。

问题是,如果cookie将通过HTTP传回,则无论您是否“签名”它都没有关系。任何中间人都可以获得“签名/加密的session_id”,并提出假装成为合适用户的进一步请求。我的意思是,这个攻击者不必关心加密数据中的哪些信息,他可以传递完全相同的签名/加密数据,而服务器无法弄清楚它是否来自正确的用户。

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

此答案仅适用于已签名的session_id。

1

我问这个问题,以及我能想到是唯一的答案,

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

两个看起来虽然使用好会议的缓存会否定b的需要),并假设你的图书馆用户的正当理由是足够愚蠢更改默认的会话ID生成,似乎有点太多对安全守卫他们的当大多数用户只使用默认的生成算法时,他们会有自己的愚蠢。