登录
首页 >  Golang >  Go问答

修复 gosec 警告 G107:处理 GoLang URL 变量的 tainted 数据

来源:stackoverflow

时间:2024-02-17 13:03:25 496浏览 收藏

对于一个Golang开发者来说,牢固扎实的基础是十分重要的,golang学习网就来带大家一点点的掌握基础知识点。今天本篇文章带大家了解《修复 gosec 警告 G107:处理 GoLang URL 变量的 tainted 数据》,主要介绍了,希望对大家的知识积累有所帮助,快点收藏起来吧,否则需要时就找不到了!

问题内容

如果我在下面的片段上运行 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)
}

正确答案


如果您正在使用 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)
}

解决此问题的方法是更改​​执行请求的函数。可以使用 http.newrequest(method, url, body) 来封装请求,而不是使用 http.get(url),因此请求不会立即执行。所以你的最终代码可能是:

func MakeGetRequest(uri string) error{
  req, err := http.NewRequest(http.MethodGet, uri, nil) 
  if err != nil {
    return err
  }

  res, err := http.DefaultClient.Do(req) 
  if err != nil {
   return err
  }
 }

通过此更新,http.newrequest 验证方法和 url,设置请求的上下文,并在必要时提供更大的更改灵活性。

文中关于的知识介绍,希望对你的学习有所帮助!若是受益匪浅,那就动动鼠标收藏这篇《修复 gosec 警告 G107:处理 GoLang URL 变量的 tainted 数据》文章吧,也可关注golang学习网公众号了解相关技术文章。

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>