CodeQL 文档

不安全的 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

单击以在 CodeQL 代码库中查看查询

库插件(例如,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);
}

参考资料

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