CodeQL 文档

URL 方案检查不完整

ID: go/incomplete-url-scheme-check
Kind: problem
Security severity: 7.8
Severity: warning
Precision: high
Tags:
   - security
   - correctness
   - external/cwe/cwe-020
Query suites:
   - go-code-scanning.qls
   - go-security-extended.qls
   - go-security-and-quality.qls

点击查看 CodeQL 存储库中的查询

具有特殊方案 javascript 的 URL 可用于编码 JavaScript 代码,以便在访问 URL 时执行。虽然这是创建功能丰富且响应迅速的 Web 应用程序的强大机制,但它也存在潜在的安全风险:如果 URL 来自不受信任的来源,则它可能包含有害的 JavaScript 代码。因此,许多框架和库首先检查任何不受信任 URL 的 URL 方案,并拒绝使用 javascript 方案的 URL。

但是,datavbscript 方案可以非常类似的方式表示可执行代码,因此任何针对 javascript 进行检查但不针对 datavbscript 进行检查的验证逻辑都可能不够充分。

建议

添加涵盖 data:vbscript: 的检查。

示例

以下函数验证(可能是不可信的)URL urlstr。如果其方案为 javascript,则返回无害的占位符 URL about:blank 以防止代码注入;否则返回 urlstr 本身。

package main

import "net/url"

func sanitizeUrl(urlstr string) string {
	u, err := url.Parse(urlstr)
	if err != nil || u.Scheme == "javascript" {
		return "about:blank"
	}
	return urlstr
}

虽然此检查提供部分保护,但应将其扩展到涵盖 datavbscript

package main

import "net/url"

func sanitizeUrlGod(urlstr string) string {
	u, err := url.Parse(urlstr)
	if err != nil || u.Scheme == "javascript" || u.Scheme == "data" || u.Scheme == "vbscript" {
		return "about:blank"
	}
	return urlstr
}

参考

  • ©GitHub 公司
  • 条款
  • 隐私