不安全的 jQuery 插件¶
ID: js/unsafe-jquery-plugin
Kind: path-problem
Security severity: 6.1
Severity: warning
Precision: high
Tags:
- security
- external/cwe/cwe-079
- external/cwe/cwe-116
- frameworks/jquery
Query suites:
- javascript-code-scanning.qls
- javascript-security-extended.qls
- javascript-security-and-quality.qls
库插件(例如,jQuery 库的插件)通常通过插件客户端提供的选项进行配置。但是,客户端不知道插件的实现细节,因此记录每个选项的功能非常重要。客户端负责清理的插件选项的文档尤其重要。否则,插件可能会在没有先进行适当清理的情况下将用户输入(例如,URL 查询参数)写入网页,这允许通过动态 HTML 构建在客户端应用程序中出现跨站脚本漏洞。
建议¶
记录所有可能导致跨站脚本攻击的选项,并在不打算进行动态 HTML 构建的情况下防御不安全输入。
示例¶
以下示例展示了一个 jQuery 插件,该插件选择一个 DOM 元素,并将它的文本内容复制到另一个 DOM 元素。选择操作是通过使用插件选项 sourceSelector
作为 CSS 选择器来执行的。
jQuery.fn.copyText = function(options) {
// BAD may evaluate `options.sourceSelector` as HTML
var source = jQuery(options.sourceSelector),
text = source.text();
jQuery(this).text(text);
}
但是,这不是一个安全的插件,因为对 jQuery
的调用会将 sourceSelector
解释为 HTML,如果它是一个以 <
开头的字符串。
插件可以使用 jQuery.find
始终将 sourceSelector
解释为 CSS 选择器,而不是记录客户端负责清理 sourceSelector
。
jQuery.fn.copyText = function(options) {
// GOOD may not evaluate `options.sourceSelector` as HTML
var source = jQuery.find(options.sourceSelector),
text = source.text();
jQuery(this).text(text);
}
参考资料¶
OWASP:基于 DOM 的 XSS 防御备忘单.
OWASP:XSS(跨站脚本)防御备忘单.
OWASP 基于 DOM 的 XSS.
OWASP 跨站脚本类型.
维基百科:跨站脚本
jQuery:插件创建.
Bootstrap:易受 XSS 攻击的 Bootstrap 插件.
常见漏洞枚举:CWE-79.
常见漏洞枚举:CWE-116.