Checkmarx扫描报JS代码未信任数据嵌入漏洞,求修复方案
问题分析与修复方案
问题点拆解
- 冗余的编码解码操作:
decodeURIComponent(encodeURIComponent($(this).attr('name')))完全多余,两个方法的作用互相抵消,不会对原始字符串做任何有效处理,反而增加了不必要的计算环节。 - 净化时机错误:你的代码先将原始数据通过
$.parseHTML转换为DOM节点,再提取文本,最后才用DOMPurify净化。但DOMPurify的核心作用是在数据进入DOM解析流程之前净化不可信内容,当前流程相当于先让未净化的数据经过DOM解析(这一步本身就存在XSS风险),再做净化,本末倒置,无法规避Checkmarx检测到的风险点。 - 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
相关产品推荐
相关产品推荐

