【问题标题】:GoLang untaint URL variable to fix gosec warning G107GoLang untaint URL 变量修复 gosec 警告 G107
【发布时间】:2022-07-29 15:26:26
【问题描述】:

如果我在下面的片段上运行 gosec,我会收到一个污染的 URL 警告:G107 (CWE-88): Potential HTTP request made with variable url (Confidence: MEDIUM, Severity: MEDIUM)

我想我应该使用 'url' 包,但它似乎没有提供比 ParseQuery() 更多的功能来检测这一点,但尽管它给出了一个错误,但 gosec 仍然报告为一个潜在的漏洞。

我如何编写删除警告,最好只使用标准库?

func Run() {
    MakeGetRequest("https://www.google.com/hi?a=7; rm /* -rf")
}

func MakeGetRequest(uri string) {
    res, _ := http.Get(uri)
    fmt.Println(res)
}

【问题讨论】:

  • securego.io/docs/rules/g107.html 我认为这与; rm /* -rf 无关;它是关于作为字符串传入的 URL,可能从用户提供的输入中设置。我不知道url.Parse 是怎么解决的;有效的 url 仍然可能是恶意的。 CWE-88 是关于命令注入,但 G107 似乎更多的是关于 url 设置
  • 老实说,我只是附加了 rm 以显示“注入”,如果您 ParseQuery 它抱怨,但这并不能帮助您在没有受污染组件的情况下重新组装 URI。本质上,我想整理 CI 管道中的 gosec 警告,但我不知道如何使这些“安全”,因此检查通过而没有报告。 (我的理念是,如果你不能解决警告,或者它被认为不够重要,那么让它贬低报告的整个目的,意味着人们不会检查它是否有更严重的问题)
  • 您是否尝试在 const 中设置 url?即 const url = "google.com/hi?a=7; rm /* -rf" ?
  • 它需要在不同的环境下工作,所以不能是const

标签: go gosec


【解决方案1】:

根据G107 中提到的准则,您应该在const 中提及url

package main

import (
    "fmt"
    "net/http"
)

const url = "url"

func main() {
    resp, err := http.Get(url)
    if err != nil {
        fmt.Println(err)
    }
    fmt.Println(resp.Status)
}

为了更好地理解,您可以参考这里:https://securego.io/docs/rules/g107.html

如果您想删除 G107 警告,那么您应该明确排除它。

# Run a specific set of rules
$ gosec -include=G101,G203,G401 ./...

# Run everything except for rule G303
$ gosec -exclude=G303 ./...

# folders and files also can be excluded.

更多了解请参考 gosec 文档:https://github.com/securego/gosec

【讨论】:

  • 我们不能将其设为 const,因为我们的资源服务器的 url 在生产环境和测试环境中是不同的。我想知道是否有办法通过“删除狡猾的分隔符”功能而不是关闭检查来运行 URL。
【解决方案2】:

如果您正在使用 golangci-lint,并且希望它简单地忽略此警告,因为您无法将 url 设置为常量,您可以使用 //nolint 指令,如下所示:

func Run() {
    MakeGetRequest("https://www.google.com/hi?a=7; rm /* -rf")
}

func MakeGetRequest(uri string) {
    res, _ := http.Get(uri) //nolint
    fmt.Println(res)
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-02-18
    • 1970-01-01
    • 1970-01-01
    • 2017-05-31
    • 1970-01-01
    • 2012-09-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多