Fortify报DOM-jQuery型XSS漏洞第25行修复方案咨询
漏洞根因说明
Fortify标记此处XSS的核心原因是$("#id-column").val()属于用户可控输入,你直接将该值拼接进jQuery选择器字符串中未做任何校验。若攻击者可篡改该输入值,可构造恶意字符串触发DOM型XSS。
修复思路有效性判断
你提出的校验选择器取值合法性的思路完全正确,可直接落地,补充具体实现方案:
- 先明确
#id-column的合法取值范围:如果业务中该值仅为列序号(正整数),直接做数字格式校验即可,示例代码如下:
} else if($("#id-type").val() == 'D') { const colVal = $("#id-column").val(); // 仅允许正整数输入,非法值直接拦截不执行后续逻辑 if(!/^\d+$/.test(colVal)) { return; } const $targetCol = $("#column" + colVal); $targetCol.attr("src", "/app/includes/images/down.gif"); $targetCol.attr("width", "10"); // 注:你原代码第26行存在语法错误,val()返回字符串无法调用attr方法,修正为如下写法 $targetCol.attr("height", "5"); }
- 如果业务允许该值包含字母,可限定仅允许大小写字母、数字、下划线三类安全字符,校验正则调整为
/^[a-zA-Z0-9_]+$/即可。
误报可能性判断
如果你的业务逻辑中#id-column的取值完全由后端生成、用户端没有任何篡改路径,可判定为误报。但从安全防御的角度,仍建议补充上述校验逻辑,避免后续业务迭代调整输入来源后引入真实风险。
内容的提问来源于stack exchange,提问作者Teco
相关产品推荐
相关产品推荐

