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

jQuery中.text()引发客户端潜在XSS漏洞的修复方法咨询

漏洞原因说明

.text()本身不存在安全问题,它只会返回目标元素内的纯文本内容,不会解析HTML。真正的风险点是你把取到的未做任何转义的文本,直接拼接到了jQuery选择器字符串中。
jQuery选择器有自己的语法解析规则,如果拼接进去的内容包含]、"、'、空格、括号这类特殊符号,会直接打破选择器的语法结构。如果#plazoActual的文本内容是用户可控的(比如来自用户提交内容、URL参数、未校验的第三方返回值),攻击者可以构造特殊字符串闭合选择器语法,在低版本jQuery中甚至会触发DOM解析逻辑执行任意脚本,形成XSS漏洞。
举个直观的例子,如果#plazoActual的文本被篡改为:

1]').remove();$('body').append('<img src=x onerror=alert(document.cookie)>');//

最终拼接出来的选择器字符串会变成可执行的恶意代码,直接触发脚本执行。

安全修复方案

优先推荐用DOM原生属性匹配的方式写逻辑,从根源上避免选择器注入问题,不需要额外转义,兼容性最好:

const plazoVal = $('#plazoActual').text().trim();
$('#plazo input').filter(function() {
  return this.value === plazoVal;
}).prop('checked', true);

这种写法是遍历#plazo下的所有input,直接拿元素的value属性和目标值做严格相等判断,完全不经过选择器语法解析,不管目标值里包含什么特殊字符都不会出现语法逃逸,彻底堵死注入路径。

如果你习惯用属性选择器写法,在jQuery 3.0及以上版本中,可以使用官方提供的$.escapeSelector()方法转义拼接内容里的选择器特殊字符,注意属性值必须用双引号包裹:

const plazoVal = $.escapeSelector($('#plazoActual').text().trim());
$('#plazo input[value="' + plazoVal + '"]').prop('checked', true);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 21:48:16