CodeQL 文档

DOM 文本重新解释为 HTML

ID: js/xss-through-dom
Kind: path-problem
Security severity: 6.1
Severity: warning
Precision: high
Tags:
   - security
   - external/cwe/cwe-079
   - external/cwe/cwe-116
Query suites:
   - javascript-code-scanning.qls
   - javascript-security-extended.qls
   - javascript-security-and-quality.qls

点击查看 CodeQL 代码库中的查询

从 DOM 节点中提取文本并将其解释为 HTML 可能导致跨站脚本漏洞。

具有此漏洞的网页从 DOM 读取文本,然后将文本作为 HTML 添加到 DOM。使用 DOM 中的文本作为 HTML 会有效地取消文本的转义,从而使对文本进行的任何转义失效。如果攻击者能够控制安全的清理文本,那么此漏洞可以被利用来执行跨站脚本攻击。

建议

为了防止跨站脚本攻击,请在将文本写入页面之前考虑使用上下文输出编码/转义,或使用下面参考资料部分中提到的其他解决方案之一。

示例

以下示例显示一个网页使用data-target属性来选择和操作使用 JQuery 库的 DOM 元素。在示例中,data-target属性被读入target变量,然后$函数应该使用target变量作为 CSS 选择器来确定要操作的元素。

$("button").click(function () {
    var target = $(this).attr("data-target");
    $(target).hide();
});

但是,如果攻击者可以控制data-target属性,那么target的值可以用来导致$函数执行任意 JavaScript。

可以使用$.find代替$来修复上述漏洞。$.find函数只会将target解释为 CSS 选择器,而不是 HTML,从而防止 XSS 攻击。

$("button").click(function () {
    var target = $(this).attr("data-target");
	$.find(target).hide();
});

参考资料

  • ©2025GitHub, Inc.
  • 条款
  • 隐私