You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置JBoss防止Host头攻击引发的恶意重定向

解决JBoss Web无域名时的非法302重定向问题

这个问题我之前帮朋友排查过,本质是JBoss(底层基于Tomcat)默认的目录重定向规则在搞鬼——当请求的路径是目录但不带结尾斜杠时,它会默认用请求头里的Host值生成绝对URL重定向,哪怕你的服务器根本没配置这个Host域名。咱们一步步来解决:

方法一:启用相对路径重定向(推荐)

这种方法既能保留目录自动补全斜杠的功能,又能避免跳转到陌生域名,是最稳妥的方案:

  1. 找到JBoss的配置文件,单机模式是standalone/configuration/standalone.xml,域模式是domain/configuration/domain.xml。
  2. 定位到Web子系统的配置节点,格式大概是<subsystem xmlns="urn:jboss:domain:web:X.X">(X.X是你的JBoss版本号,比如11.0、14.0)。
  3. 在<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>
    
  4. 重启JBoss服务器,再用你的测试命令验证:
    curl -i -H "Host: www.google.com " "http://127.0.0.1:8080/web/common"
    
    此时返回的Location会是/web/common/(相对路径),浏览器会自动基于当前访问的IP地址跳转,不会再跳到www.google.com了。

方法二:完全禁用目录重定向

如果你不需要JBoss自动给目录补斜杠的功能,可以直接关闭这个行为:

  1. 打开你的Web应用的WEB-INF/web.xml文件(如果是全局生效,也可以修改JBoss默认的web.xml,但不推荐)。
  2. 添加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>
    
  3. 重启服务器后,再请求不带斜杠的/web/common,服务器会直接返回目录内容(如果你开启了目录列表)或者404,不会触发任何重定向。

原理补充

默认情况下,JBoss遵循HTTP规范,当请求目录不带斜杠时,会返回302重定向到带斜杠的路径,目的是让浏览器后续的请求路径更规范。但它默认用请求头里的Host值生成绝对URL,这就导致了在你这种未配置对应Host的场景下,出现跳转到陌生域名的问题。启用相对重定向后,服务器会返回相对路径的Location,彻底避免了这个问题。

内容的提问来源于stack exchange,提问作者Agan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:42:41