如何配置JBoss防止Host头攻击引发的恶意重定向
解决JBoss Web无域名时的非法302重定向问题
这个问题我之前帮朋友排查过,本质是JBoss(底层基于Tomcat)默认的目录重定向规则在搞鬼——当请求的路径是目录但不带结尾斜杠时,它会默认用请求头里的Host值生成绝对URL重定向,哪怕你的服务器根本没配置这个Host域名。咱们一步步来解决:
方法一:启用相对路径重定向(推荐)
这种方法既能保留目录自动补全斜杠的功能,又能避免跳转到陌生域名,是最稳妥的方案:
- 找到JBoss的配置文件,单机模式是
standalone/configuration/standalone.xml,域模式是domain/configuration/domain.xml。 - 定位到Web子系统的配置节点,格式大概是
<subsystem xmlns="urn:jboss:domain:web:X.X">(X.X是你的JBoss版本号,比如11.0、14.0)。 - 在
<virtual-server>节点(通常是name="default-host"的那个)里添加<http-properties>配置,开启相对重定向:<virtual-server name="default-host" enable-welcome-root="true"> <alias name="localhost"/> <!-- 这里可以保留你已有的alias配置 --> <http-properties> <property name="use-relative-redirects" value="true"/> </http-properties> </virtual-server> - 重启JBoss服务器,再用你的测试命令验证:
此时返回的Location会是curl -i -H "Host: www.google.com " "http://127.0.0.1:8080/web/common"/web/common/(相对路径),浏览器会自动基于当前访问的IP地址跳转,不会再跳到www.google.com了。
方法二:完全禁用目录重定向
如果你不需要JBoss自动给目录补斜杠的功能,可以直接关闭这个行为:
- 打开你的Web应用的
WEB-INF/web.xml文件(如果是全局生效,也可以修改JBoss默认的web.xml,但不推荐)。 - 添加
DefaultServlet的初始化参数,禁用路径重定向:<servlet> <servlet-name>default</servlet-name> <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class> <init-param> <param-name>redirectWithPathInfo</param-name> <param-value>false</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> - 重启服务器后,再请求不带斜杠的
/web/common,服务器会直接返回目录内容(如果你开启了目录列表)或者404,不会触发任何重定向。
原理补充
默认情况下,JBoss遵循HTTP规范,当请求目录不带斜杠时,会返回302重定向到带斜杠的路径,目的是让浏览器后续的请求路径更规范。但它默认用请求头里的Host值生成绝对URL,这就导致了在你这种未配置对应Host的场景下,出现跳转到陌生域名的问题。启用相对重定向后,服务器会返回相对路径的Location,彻底避免了这个问题。
内容的提问来源于stack exchange,提问作者Agan
相关产品推荐
相关产品推荐

