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

如何处理Checkmarx扫描发现的Reflected Cross-Site Scripting(XSS)风险?

解决Checkmarx扫描出的反射型XSS问题

针对你遇到的Checkmarx提示的XSS风险(不可信数据直接通过setCatList嵌入输出),可以从输入合法性验证和输出安全编码/净化两个核心维度处理,具体方案如下:

1. 对不可信数据做输入校验

从存储过程返回的catList属于不可信来源,先对Cat对象的所有前端可见字段做规则校验,过滤不符合预期的内容:

  • 限制字段长度:比如名称、描述类字段限定在合理长度范围内
  • 校验字符范围:只允许字母、数字、常用标点,拒绝包含<script>、onclick等恶意关键词的内容
  • 非法内容处理:直接丢弃非法字段值,或替换为安全默认值

示例代码:

GetCatSP sp = getCatSP();
Map<String, Object> output = sp.getMyData(inParams);
List<Cat> catList = (List<Cat>) output.get("cat_info");

// 净化catList中的每个Cat对象
List<Cat> sanitizedCatList = catList.stream().map(cat -> {
    // 过滤name字段的非法字符,只保留字母、数字、空格和常用标点
    String safeName = cat.getName().replaceAll("[^a-zA-Z0-9\\s.,!?]", "");
    cat.setName(safeName.isEmpty() ? "Unknown" : safeName);
    
    // 移除description字段的HTML标签,并限制最大长度为200字符
    String safeDesc = cat.getDescription().replaceAll("<[^>]+>", "");
    safeDesc = safeDesc.substring(0, Math.min(safeDesc.length(), 200));
    cat.setDescription(safeDesc);
    
    // 对其他前端展示的字段执行类似校验
    return cat;
}).collect(Collectors.toList());

response.setCatList(sanitizedCatList);

2. 对输出字段做安全编码

如果验证后仍存在风险(比如允许用户输入包含特殊字符的合法内容),则对所有会被渲染到HTML/JS的字段做编码,确保浏览器将其解析为纯文本而非可执行脚本。推荐使用成熟的安全库实现:

方案A:使用OWASP ESAPI库

引入ESAPI依赖后,对字段做HTML编码:

import org.owasp.esapi.ESAPI;

// ...

List<Cat> encodedCatList = catList.stream().map(cat -> {
    cat.setName(ESAPI.encoder().encodeForHTML(cat.getName()));
    cat.setDescription(ESAPI.encoder().encodeForHTML(cat.getDescription()));
    return cat;
}).collect(Collectors.toList());

response.setCatList(encodedCatList);

方案B:使用Spring自带工具类

如果是Spring项目,直接用HtmlUtils做编码:

import org.springframework.web.util.HtmlUtils;

// ...

List<Cat> encodedCatList = catList.stream().map(cat -> {
    cat.setName(HtmlUtils.htmlEscape(cat.getName()));
    cat.setDescription(HtmlUtils.htmlEscape(cat.getDescription()));
    return cat;
}).collect(Collectors.toList());

response.setCatList(encodedCatList);

额外注意事项

  • 如果接口返回JSON给前端,前端渲染时要避免使用innerHTML这类危险API,尽量用文本节点渲染;后端编码可作为双重保障。
  • 不要依赖单一防护手段,验证+编码结合能大幅降低XSS风险。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 12:05:42