会话 Cookie 窃取保护

信息安全 会话管理 会话固定
2021-08-31 21:28:28

我正在研究如何保护网站免遭其会话 cookie 被盗。这些是我知道广为人知/使用的控件:

  • HTTPS 无处不在
  • 仅使用安全创建的随机字符串作为 cookie 值
  • 将会话 cookie 标记为 Secure 和 HttpOnly
  • 登录时更改会话 cookie

我正在使用我在Tomcat bug tracker中找到的建议进行辩论。对于每个会话存储以下附加信息:

  • SSL 会话 ID
  • HTTP 用户代理
  • 远程 IP 地址

在每个请求上,我都会验证三个存储值中的两个是否与会话中捕获的值匹配。这样一来,三者之一可能会因各种原因而改变,而不会影响用户。普通用户每次请求更改一个以上的可能性很小。

这看起来像是对会话 cookie 的合理额外防御吗?

2个回答

从站点开发人员的角度来看,您应该使用以下内容:

  • 采用 SSL:在站点范围内使用 SSL。
  • 在所有 cookie 上设置secure标志。这将确保它们仅通过 SSL 连接发送。
  • 打开 HSTS。

这将确保会话 cookie 只能通过 SSL 访问,并保护您免受窃听和中间人攻击。

在此站点上搜索 SSL 站点范围,以查找有关如何执行此操作的许多参考。

我不会费心检查 HTTP 用户代理或远程 IP 地址。它们不会增加太多安全性,并且会在某些情况下破坏合法使用。从安全角度来看,检查 SSL 会话 ID(SSL 会话绑定)是可以的,但配置起来可能会有点痛苦,而且对我来说不是高优先级:其他防御措施都很好。


其他建议:

如果您担心通过 XSS 窃取 cookie,最好的防御方法是使用标准方法来避免 Web 应用程序中的 XSS 错误。请参阅 OWASP 以获取许多优秀资源(您将希望使用上下文相关的输出转义)。

您提到“会话固定”作为标签,但这是一个非常不同的威胁。对会话固定的防御是使用不易受会话固定影响的框架。大多数现代 Web 应用程序开发框架都应该为您解决这个问题,而无需任何额外的工作。

遵循安全的 Web 应用程序开发实践。OWASP 在这方面有很多优秀的资源。

仔细阅读@Rook 的建议并遵循它:

检查 IP 地址将阻止负载均衡器后面的人访问该站点。检查用户代理没有提供额外的保护,因为这个变量是攻击者控制的。该站点需要有自由形式的 xss、csrf 和点击劫持漏洞。

实现 2/3 验证可以正常工作。我还没有对此进行测试,甚至不知道它是否是一种可行的方法,但您也可以实现一种“更改密钥”,其中会话密钥随每个请求而变化,从而降低攻击窗口。