在基于专有 MVC 和授权模型的 Web 应用程序中,我们最近迁移到了 Spring MVC。作为这一举措的一部分,我们也在考虑从本地创建的 GUID 转移到与每个请求一起传递的基于 cookie 的会话 ID。
从表面上看,在我们的例子中,这样做似乎是一个很大的劣势,因为标准的 JSESSION/HttpSession 似乎是所有安全问题的根源:
- 会话固定(在现有代码中,会话仅在成功登录后创建,因此我们永远不需要 invalidate() 会话。
- CSRF - 会话永远不会作为 cookie 传递,因此这绝不是一种风险(天哪,这是一个需要处理的问题,因为没有真正的框架或通用解决方案检查 HDIV 和 CSRFGuard)。
- 测试可用性 - QA 可以轻松地将具有多个角色的多个用户连接到同一服务器,而 JSESSION 则无法实现。
- 在各种容器(Weblogic、JBOSS 和 Websphere)中一致的 HTTPSession 创建和失效
- 在 HTTP 到 HTTPS 之间移动时 JSession 处理不一致。
所以,除了“成为标准”的明显优势之外,关于我为什么要走 JSESSION 路线的任何线索?