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

如何在Spring Boot中sanitize httpServletRequest.getQueryString()修复CheckMarx反射型XSS漏洞?

修复CheckMarx检测出的Reflected XSS All Clients漏洞

漏洞原因

问题出在response.setQueryString(httpServletRequest.getQueryString());这行代码——getQueryString()拿到的是用户可控的URL查询参数,直接返回给客户端的话,浏览器可能把里面的恶意脚本解析执行,触发反射型XSS,这就是CheckMarx告警的核心原因。

具体修复方法

1. 用OWASP ESAPI做编码清理

这是行业内规范的处理方式,借助OWASP的ESAPI库对查询字符串做HTML实体编码,把特殊字符转义成浏览器不会解析为脚本的格式:

import org.owasp.esapi.ESAPI;
import org.owasp.esapi.Encoder;

// 获取ESAPI编码器实例
Encoder encoder = ESAPI.encoder();
// 对原始查询字符串做HTML编码
String safeQueryString = encoder.encodeForHTML(httpServletRequest.getQueryString());
response.setQueryString(safeQueryString);

2. 自定义清理逻辑(无需第三方库)

如果不想引入外部依赖,也可以手动转义关键的HTML特殊字符:

String rawQuery = httpServletRequest.getQueryString();
String safeQuery = null;
if (rawQuery != null) {
    safeQuery = rawQuery
            .replace("&", "&")
            .replace("<", "&lt;")
            .replace(">", "&gt;")
            .replace("\"", "&quot;")
            .replace("'", "&#x27;");
}
response.setQueryString(safeQuery);

3. 额外添加输入验证(增强安全)

除了清理,还可以先验证查询字符串的合法性,只允许包含字母、数字和常见的合法参数符号,直接拒绝可疑输入:

String rawQuery = httpServletRequest.getQueryString();
String safeQuery = null;
// 只允许合法字符,不符合则设为空字符串
if (rawQuery != null && rawQuery.matches("[a-zA-Z0-9=&\\?\\-_.]*")) {
    safeQuery = rawQuery;
} else {
    safeQuery = "";
}
response.setQueryString(safeQuery);

注意事项

清理后的字符串会把<>等特殊字符转成HTML实体,浏览器只会把它们当普通文本显示,不会执行脚本,这样就能通过CheckMarx的安全校验。如果业务需要保留某些特殊字符,得根据实际情况调整转义规则,平衡安全要求和业务需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 17:45:14