解决JBoss中的会话修复问题

我需要在JBoss中运行的Java Web应用程序中阻止Session Fixation ,一种特殊类型的会话劫持。 但是,似乎标准习惯用法在JBoss中不起作用 。 这可以解决吗?

这个缺陷 (在此处找到)指出了解决方案的方法。 在JBoss中运行的Tomcat实例配置为emptySessionPath =“true”,而不是“false”,这是默认值。 这可以在.../deploy/jboss-web.deployer/server.xml ; HTTP和AJP连接器都有此选项。

该function本身用于消除上下文路径(例如http://example.com/foo中的 “foo”),使其不包含在JSESSIONID cookie中。 将其设置为false将破坏依赖跨应用程序身份validation的应用程序,其中包括使用某些门户框架构建的内容。 但是,它并没有对相关应用产生负面影响。

此问题及其发生的具体情况是Tomcat和JBoss中的问题。 Tomcat共享emptySessionPath =“true”效果(实际上JBoss从Tomcatinheritance它)。

当你试图阻止会话固定攻击时,这似乎是Tomcat和JBoss中的一个错误,但servlet规范(至少版本2.3)实际上并不需要根据任何特定逻辑定义或重新定义JSESSIONID。 也许这已在以后的版本中清理过了。

一种解决方法是将客户端地址存储在会话中。 响应包装器应validation会话中设置的客户端地址与访问会话的客户端地址相同。

我从以下论坛之一了解下面的代码设置片段。 我添加了下面的行。 但是当我在登录到应用程序之前和之后打印会话ID时,它是相同的。 我如何测试会话固定。

  1. D:\ jboss-5.1.0.GA \ bin \ run.cof文件并添加以下行。 设置“JAVA_OPTS =%JAVA_OPTS%-Dorg.apache.catalina.connector.Request.SESSION_ID_CHECK = false”

  2. 在jboss应用程序的每个context.xml中。 d:\ jboss-5.1.0.GA \服务器\ DEFAULT \部署\ jbossweb.sar \ context.xml中