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
从 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();
});
参考资料¶
OWASP:基于 DOM 的 XSS 防御速查表.
OWASP:XSS(跨站脚本攻击)防御速查表.
OWASP 基于 DOM 的 XSS.
OWASP 跨站脚本攻击类型.
维基百科:跨站脚本攻击.
常见弱点枚举:CWE-79.
常见弱点枚举:CWE-116.