jQuery Core 3.5 升级指南:HTML 解析漏洞总结 漏洞概述 jQuery 3.5 版本对 函数进行了修改,改变了 HTML 字符串的解析行为。旧版本中,jQuery 会将 XHTML 风格的自闭合标签(如 )替换为等效的 HTML 标签(如 )。新版本中,jQuery 不再进行这种替换,而是直接返回原始字符串,由浏览器原生解析。 这导致了一个安全漏洞:攻击者可以利用浏览器对 HTML 标签的解析规则,通过构造特殊的 HTML 字符串(如 ),在 jQuery 的 DOM 操作(如 、 等)中注入恶意脚本或破坏页面结构。 影响范围 受影响版本:jQuery 3.5.0 及更高版本。 受影响方法:所有通过 处理 HTML 字符串的方法,主要包括: - - - - - - - - - - 本身 触发条件:当传入的 HTML 字符串包含未闭合的标签(如 、 )或 XHTML 风格的自闭合标签(如 )时,浏览器会尝试自动闭合这些标签,可能导致意外的 DOM 结构或 XSS 攻击。 修复方案 方案一:使用 jQuery Migrate 插件(推荐用于过渡期) 如果暂时无法升级代码,可以使用 jQuery Migrate 插件来恢复旧版行为。 > 注意:此方法会禁用 jQuery 3.5.0 的安全修复,仅作为临时解决方案。 方案二:手动重新定义 如果不使用 jQuery Migrate,可以手动重新定义 以恢复旧版行为。 方案三:使用 DOMPurify 进行 HTML 净化(推荐用于生产环境) 对于需要处理用户输入的场景,建议使用 DOMPurify 等安全库对 HTML 进行净化。 方案四:避免使用 XHTML 风格的自闭合标签 在编写库或需要兼容 HTML 和 XHTML 的场景中,避免使用 XHTML 风格的自闭合标签(如 ),改用标准的 HTML 标签(如 )。 对于空元素,使用标准的 XHTML 自闭合标签(如 ): 方案五:确保正确的 MIME 类型 确保页面使用正确的 MIME 类型(如 ),否则浏览器会以 HTML 模式解析,可能导致意外的标签闭合行为。