GoLang unpaint URL变量修复gosec警告G107

jfgube3f  于 2023-08-01  发布在  Go
关注(0)|答案(3)|浏览(104)

如果我在下面的片段上运行gosec,我会得到一个被污染的URL警告:第一个月
我想我应该使用'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)
}

字符串

sr4lhrrt

sr4lhrrt1#

如果你使用的是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)
}

字符串

8e2ybdfx

8e2ybdfx2#

根据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

kx1ctssn

kx1ctssn3#

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

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,为请求设置上下文,并在必要时提供更大的更改灵活性。

相关问题