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

Checkmarx扫描报JS代码未信任数据嵌入漏洞,求修复方案

问题分析与修复方案

问题点拆解

  1. 冗余的编码解码操作:decodeURIComponent(encodeURIComponent($(this).attr('name')))完全多余,两个方法的作用互相抵消,不会对原始字符串做任何有效处理,反而增加了不必要的计算环节。
  2. 净化时机错误:你的代码先将原始数据通过$.parseHTML转换为DOM节点,再提取文本,最后才用DOMPurify净化。但DOMPurify的核心作用是在数据进入DOM解析流程之前净化不可信内容,当前流程相当于先让未净化的数据经过DOM解析(这一步本身就存在XSS风险),再做净化,本末倒置,无法规避Checkmarx检测到的风险点。
  3. jQuery方法的风险触发:Checkmarx告警指向的是你用$(jQuery)处理未净化数据的环节,$.parseHTML直接处理未净化的不可信数据时,可能会解析并执行恶意代码,这正是扫描告警的核心原因。

修复代码

简化逻辑,将净化步骤前置,直接对原始的name属性值进行净化,再按需处理:

// 1. 获取原始的name属性值
var rawName = $(this).attr('name');
// 2. 先净化不可信数据
var sanitizedName = DOMPurify.sanitize(rawName);
// 3. 若需要转换为文本,直接处理净化后的内容
var radio = $(sanitizedName).text();

// 如果你只需要纯文本内容,甚至不需要转DOM,直接使用净化后的字符串即可:
// var radio = sanitizedName;

修复原理

  • 净化前置:在数据进入DOM解析流程之前完成净化,DOMPurify会过滤所有潜在的恶意HTML标签、脚本代码,从源头消除XSS风险。
  • 简化逻辑:移除冗余的编码解码步骤,让代码更清晰,同时避免不必要的处理环节。
  • 安全处理DOM:jQuery处理的是已经过DOMPurify净化的安全内容,不会触发Checkmarx的扫描告警。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 11:20:26