我需要在JBoss中运行的Java Web应用程序中阻止Session Fixation,一种特殊类型的会话劫持。但是,它似乎是标准习语doesn't work in JBoss。这可以解决吗?
答案 0 :(得分:8)
This defect(找到here)指出了解决方案的方法。在JBoss中运行的Tomcat实例配置为emptySessionPath =“true”,而不是“false”,这是默认值。这可以在.../deploy/jboss-web.deployer/server.xml
中修改; HTTP和AJP连接器都有此选项。
该功能本身用于消除JSESSIONID cookie中包含的上下文路径(例如http://example.com/foo中的“foo”)。将其设置为false将破坏依赖跨应用程序身份验证的应用程序,其中包括使用某些门户框架构建的内容。但是,它并没有对相关应用产生负面影响。
答案 1 :(得分:0)
此问题及其发生的具体情况是Tomcat和JBoss中的问题。 Tomcat共享emptySessionPath =“true”效果(实际上JBoss从Tomcat继承它)。
当您尝试阻止会话固定攻击时,这似乎是Tomcat和JBoss中的错误,但servlet规范(至少版本2.3)实际上并不需要根据任何特定逻辑定义或重新定义JSESSIONID。也许这已经在以后的版本中清理过了。
答案 2 :(得分:0)
一种解决方法是将客户端地址存储在会话中。响应包装器应该验证会话中设置的客户端地址与访问会话的客户端地址相同。
答案 3 :(得分:0)
我来自其中一个论坛的代码设置片段。我在下面添加了一些内容。但是当我在登录到应用程序之前和之后打印会话ID时,它是相同的。我如何测试会话固定。
D:\ jboss-5.1.0.GA \ bin \ run.cof文件并添加以下行。 设置“JAVA_OPTS =%JAVA_OPTS%-Dorg.apache.catalina.connector.Request.SESSION_ID_CHECK = false”
在jboss应用程序的每个context.xml中。 d:\ jboss-5.1.0.GA \服务器\ DEFAULT \部署\ jbossweb.sar \ context.xml中