Java JSESSION/HTTPSession与应用程序精心编制的会话ID
在一个基于专有MVC和授权模型的web应用程序中,我们最近迁移到了SpringMVC。 作为这一举措的一部分,我们还将考虑从随每个请求一起传递的本地创建的GUID转移到基于cookie的会话ID 从表面上看,在我们的情况下,这样做似乎是一个很大的缺点,因为标准的JSESSION/HttpSession似乎是所有安全隐患的根源:Java JSESSION/HTTPSession与应用程序精心编制的会话ID,java,spring,servlets,spring-security,shiro,Java,Spring,Servlets,Spring Security,Shiro,在一个基于专有MVC和授权模型的web应用程序中,我们最近迁移到了SpringMVC。 作为这一举措的一部分,我们还将考虑从随每个请求一起传递的本地创建的GUID转移到基于cookie的会话ID 从表面上看,在我们的情况下,这样做似乎是一个很大的缺点,因为标准的JSESSION/HttpSession似乎是所有安全隐患的根源: 会话固定(在现有代码中,会话仅在成功登录后创建,因此我们永远不需要使会话无效) CSRF-会话从来不会作为cookie传递,所以这从来都不是一个风险(天哪,这是一个有问题
因此,除了“标准化”的明显优势外,关于我为什么要走JSESSION路线,还有什么线索吗?关于为什么应该或不应该使用JSESSION,这并不是一个明确的答案,但仍有一些关于您的担忧的评论:
现在,无论您选择什么选项,都会有一些缺点。在每个请求中(因此可能在每个GET URL中)都有一个UUID不允许您的用户轻松使用书签。也不允许他们的会话保持活动状态。在经过大量讨论分析和测试后,对于我来说,tleast是一个非RESTfull应用程序,具有类似桌面的RIA UI和广泛的安全性考虑,JSESSION不是一个好办法(主要是CSRF)更好的选择是基于主体的内部生成密钥。
但这确实意味着应用程序将被迫处理超时和会话无效。关于remakrs的评论很少(谢谢):2)不是真的,CSRF比beleived危险得多,可以很容易地在POST(和Spring MVC)4)Websphere中使用,例如,除非调用HttpSession.getSession,否则不会创建会话,这与weblogic的behavioru不同。但总的来说,我没有听到任何关于避免JSSession的“大不”的声音,谢谢。我很想知道,你发现HDIV和CSRFGuard不足以提供CSRF保护吗?HDIV支持是不够的。它看起来像一个有趣的软件包,我希望我能使用它。但是我在基于文档实现它时遇到了问题,当我需要帮助时,没有响应。你可以在那里的论坛上查看movement.CSRFGuard看起来是一个很好的解决方案,但是它在CSRF的空间里太偏僻了。我已经有了ProparitySession ID,我用JSESSION替换了它,以查看我有CSRF问题,所以现在我可以添加一个新的包来生成。。。代理会话ID。。我最好(我就是这么做的)将JSESSION排除在我的解决方案之外,它在一些RIA解决方案中根本不可用,就像我的情况一样。