使用 redis-rails 作为会话存储是否安全?
Is it secure to use redis-rails as session store?
当用作会话存储时,我注意到 redis-rails 在 cookie 中以未加密的格式保存会话 ID。会话 ID 是否应该被视为安全信息并且不应该暴露在未加密的 cookie 中以阻止会话劫持尝试?
没有
会话标识符 cookie 是 link 客户端进入会话的唯一(合适的)方式。客户必须有某种声明,他们可以将其与请求一起传递,以便我们可以识别他们。
无论您使用的是 CookieStore、Redis、ActiveRecord 还是 memcached,这都适用。
用固定盐或不加盐加密会话标识符只会浪费时间,因为攻击者无论如何都可以在中间人或 XSS 攻击中访问 cookie。
如果您使用盐,您也必须 link 向用户提供。现在你有两个问题而不是一个。
虽然您可以使用一系列新颖的方法,例如使用用户代理、ip 或您认为您了解的任何其他关于客户端的 salting,但安全优势很少。
正如@pvg 所说:
Session id's merely have to be random, unpredictable and sufficiently
large.
保护会话的有意义的方法是:
- 使用 https 阻止中间人攻击。
- 在用户登录和注销时调用
reset_session
以避免会话固定。
- 清理用户输入以避免 XSS。
当用作会话存储时,我注意到 redis-rails 在 cookie 中以未加密的格式保存会话 ID。会话 ID 是否应该被视为安全信息并且不应该暴露在未加密的 cookie 中以阻止会话劫持尝试?
没有
会话标识符 cookie 是 link 客户端进入会话的唯一(合适的)方式。客户必须有某种声明,他们可以将其与请求一起传递,以便我们可以识别他们。
无论您使用的是 CookieStore、Redis、ActiveRecord 还是 memcached,这都适用。
用固定盐或不加盐加密会话标识符只会浪费时间,因为攻击者无论如何都可以在中间人或 XSS 攻击中访问 cookie。
如果您使用盐,您也必须 link 向用户提供。现在你有两个问题而不是一个。
虽然您可以使用一系列新颖的方法,例如使用用户代理、ip 或您认为您了解的任何其他关于客户端的 salting,但安全优势很少。
正如@pvg 所说:
Session id's merely have to be random, unpredictable and sufficiently large.
保护会话的有意义的方法是:
- 使用 https 阻止中间人攻击。
- 在用户登录和注销时调用
reset_session
以避免会话固定。 - 清理用户输入以避免 XSS。