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

如何修复Spring Boot中Fortify检测到的持久型XSS漏洞?

Spring Boot中Fortify检测出XSS错误的修复方案

问题背景

我的Spring Boot应用中,以下代码的最后一行被Fortify检测出XSS错误:

E body;
HttpClient client = HttpClient.newHttpClient();
HttpRequest.Builder builder = ....
builder.POST(BodyPublishers.ofString((String)body)); 
return client.send(builder.build(), BodyHandlers.ofString());

错误详情

  • 数据通过不可信来源进入Web应用。对于持久型(又称存储型)XSS,不可信来源通常是数据库或其他后端数据存储;对于反射型XSS,不可信来源通常是Web请求。
  • 数据被包含在发送给Web用户的动态内容中,未经过验证。

我明白需要验证用户输入并对输出进行编码/净化来修复该问题,请问有推荐的用于净化body变量的库或其他修复方案吗?我考虑使用JsonSanitizer或HtmlUtils.htmlEscape。


修复方案与推荐库

一、根据body内容类型选择对应方案

1. HTML内容场景:用Spring自带的HtmlUtils

如果body是HTML格式内容,直接用Spring框架自带的HtmlUtils.htmlEscape()即可,它会把HTML特殊字符转义为安全的实体字符(比如<转为&lt;),避免浏览器将恶意代码解析为可执行内容。
用法示例:

String sanitizedBody = HtmlUtils.htmlEscape((String)body);
builder.POST(BodyPublishers.ofString(sanitizedBody));

优势:无需额外引入依赖,轻量高效,适合简单的HTML转义需求。

2. JSON内容场景:用Google JsonSanitizer

如果body是JSON格式,Google的JsonSanitizer是合适选择,它能清理JSON中的危险片段(比如嵌入的脚本、非法字符),同时保证JSON结构的合法性。
先引入Maven依赖:

<dependency>
    <groupId>com.google.code.gson</groupId>
    <artifactId>gson</artifactId>
    <version>2.10.1</version> <!-- 建议使用最新稳定版本 -->
</dependency>

用法示例:

String sanitizedBody = JsonSanitizer.sanitize((String)body);
builder.POST(BodyPublishers.ofString(sanitizedBody));

二、更全面的防护:OWASP Java Encoder

如果需要覆盖多种场景(HTML、JSON、URL等),推荐使用OWASP Java Encoder,这是专门为防止注入类漏洞设计的工具,支持多场景的安全编码。
引入Maven依赖:

<dependency>
    <groupId>org.owasp.encoder</groupId>
    <artifactId>encoder</artifactId>
    <version>1.2.3</version> <!-- 建议使用最新稳定版本 -->
</dependency>

根据body类型选择编码方法:

  • HTML内容:Encoder.forHtml((String)body)
  • JSON内容:Encoder.forJson((String)body)
  • URL参数:Encoder.forUriComponent((String)body)

三、输入验证不可忽视

除了输出阶段的编码净化,在数据进入应用时必须做输入验证:

  • 若body是JSON:可以用Jackson的@Valid注解配合DTO类,验证字段的类型、长度、格式是否符合预期,拒绝非法结构的JSON。
  • 若需要保留部分合法HTML标签:可以使用OWASP HTML Sanitizer,通过白名单机制允许指定的标签和属性,彻底过滤恶意代码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 12:22:44