2

当用作会话存储时,我注意到 redis-rails 将会话 ID 以未加密格式保存在 cookie 中。会话 ID 不应该被视为安全信息,并且不应该暴露在未加密的 cookie 中以阻止会话劫持尝试吗?

4

1 回答 1

2

不。

会话标识符 cookie 是将客户端链接到会话的唯一(体面)方式。客户必须有某种可以与请求一起传递的声明,以便我们可以识别它们。

无论您使用的是 CookieStore、Redis、ActiveRecord 还是 memcached,这都适用。

使用固定盐或无盐对会话标识符进行加密只会浪费时间,因为攻击者无论如何都可以在中间人或 XSS 攻击中访问 c​​ookie。

如果您使用盐,则还必须将其链接到用户。现在你有两个问题而不是一个。

虽然您可以使用一系列新颖的方法,例如使用用户代理、ip 或您认为您了解客户端的任何其他方法,但安全性优势却很少。

正如@pvg 所说:

会话 id 必须是随机的、不可预测的和足够大的。

保护会话的有意义的方法是:

  • 使用 https 来阻止中间人攻击。
  • reset_session在登录和注销用户时调用以避免会话固定。
  • 清理用户输入以避免 XSS。
于 2017-09-10T22:36:10.477 回答