当用作会话存储时,我注意到 redis-rails 将会话 ID 以未加密格式保存在 cookie 中。会话 ID 不应该被视为安全信息,并且不应该暴露在未加密的 cookie 中以阻止会话劫持尝试吗?
问问题
1124 次
1 回答
2
不。
会话标识符 cookie 是将客户端链接到会话的唯一(体面)方式。客户必须有某种可以与请求一起传递的声明,以便我们可以识别它们。
无论您使用的是 CookieStore、Redis、ActiveRecord 还是 memcached,这都适用。
使用固定盐或无盐对会话标识符进行加密只会浪费时间,因为攻击者无论如何都可以在中间人或 XSS 攻击中访问 cookie。
如果您使用盐,则还必须将其链接到用户。现在你有两个问题而不是一个。
虽然您可以使用一系列新颖的方法,例如使用用户代理、ip 或您认为您了解客户端的任何其他方法,但安全性优势却很少。
正如@pvg 所说:
会话 id 必须是随机的、不可预测的和足够大的。
保护会话的有意义的方法是:
- 使用 https 来阻止中间人攻击。
reset_session
在登录和注销用户时调用以避免会话固定。- 清理用户输入以避免 XSS。
于 2017-09-10T22:36:10.477 回答