CodeQL 文档

错误的重定向检查

ID: go/bad-redirect-check
Kind: path-problem
Security severity: 6.1
Severity: error
Precision: high
Tags:
   - security
   - external/cwe/cwe-601
Query suites:
   - go-code-scanning.qls
   - go-security-extended.qls
   - go-security-and-quality.qls

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

应检查重定向 URL,以确保用户输入不会导致网站重定向到任意域。这通常是通过检查重定向 URL 是否以斜杠开头来完成的,大多数情况下,斜杠是同一主机上的绝对重定向。但是,浏览器将以 ///\ 开头的 URL 解释为绝对 URL。例如,重定向到 //example.com 将重定向到 https://example.com。因此,重定向检查还必须检查重定向 URL 的第二个字符。

建议

也不允许以 ///\ 开头的重定向 URL。

示例

以下函数验证(可能是不可信的)重定向 URL redir。如果它不是以 / 开头,则返回无害的占位符重定向 URL / 以防止开放重定向;否则返回 redir 本身。

package main

func sanitizeUrl(redir string) string {
	if len(redir) > 0 && redir[0] == '/' {
		return redir
	}
	return "/"
}

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

package main

func sanitizeUrl1(redir string) string {
	if len(redir) > 1 && redir[0] == '/' && redir[1] != '/' && redir[1] != '\\' {
		return redir
	}
	return "/"
}

参考

  • ©GitHub 公司
  • 条款
  • 隐私