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

如何修复Fortify检出的Java Header Manipulation请求头操纵漏洞?

Header Manipulation 漏洞修复方案

漏洞触发原因

Fortify 检出该漏洞的核心原因是:请求头、请求URL属于完全用户可控的不可信输入,未经过校验/过滤直接使用时,攻击者可插入\r、\n等换行字符,篡改后续生成的HTTP响应头结构,触发Cookie篡改、恶意跳转等风险。

最优修复步骤

  • 优先做严格格式校验
    明确MyID的业务规则,比如是UUID、数字、固定长度的字母数字组合,用正则表达式做强校验,不符合规则的请求直接拦截返回400错误。
    示例代码:
    // 示例:MyID为32位十六进制字符串的校验规则
    String myId = requestServlet.getHeader("MyID");
    // 正则可根据实际业务规则调整
    Pattern validMyIdPattern = Pattern.compile("^[a-fA-F0-9]{32}$");
    if (myId == null || !validMyIdPattern.matcher(myId).matches()) {
        response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
        return;
    }
    // 请求URL也可根据业务场景校验域名、路径规则
    String requestUrl = requestServlet.getRequestURL().toString();
    if (!requestUrl.startsWith("https://你的合法域名前缀")) {
        response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
        return;
    }
    
  • 无法限定格式时做危险字符过滤
    如果业务场景不支持做强格式校验,必须接收任意输入,直接移除所有换行类危险字符即可,这类字符是请求头操纵的核心 payload 载体:
    示例工具方法:
    public static String filterUnsafeHeaderChars(String input) {
        if (input == null) {
            return null;
        }
        // 移除回车、换行以及对应URL编码形式,避免编码绕过
        return input.replaceAll("[\r\n%0d%0a]", "");
    }
    
    使用方式:
    String myId = filterUnsafeHeaderChars(requestServlet.getHeader("MyID"));
    String a = filterUnsafeHeaderChars(requestServlet.getRequestURL().toString());
    
  • 后续使用场景额外防护
    如果要把上述参数放到HTTP响应头中,优先使用Servlet容器自带的setHeader类API,不要手动拼接响应头字符串,Tomcat 8+、Jetty 9+等新版本容器已经内置响应头换行校验,发现非法字符会直接抛出异常阻断风险。

误报说明

如果业务逻辑中读取上述参数仅用于内部业务计算、数据库查询(已做SQL注入防护),完全不会用于生成HTTP响应头/重定向地址,可提交上下文说明给安全团队确认误报,无需额外修改。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 19:45:03