如何处理gosec linter警告:可能通过变量包含文件

时间:2018-09-13 19:41:00

标签: go

如何解决gosec linter发出的以下警告:

::warning: Potential file inclusion via variable,MEDIUM,HIGH (gosec)

lint在此功能的第一行警告我:

func File2lines(filePath string) ([]string, error) {
    f, err := os.Open(filePath) //Warning here
    if err != nil {
        return nil, err
    }
    defer f.Close()
    return linesFromReader(f)
}

我已经尝试阅读本地文件包含的内容,但是看不到这里的适用范围。

4 个答案:

答案 0 :(得分:7)

路径从何而来?如果您不能绝对确定它永远不会有用户输入,则最好在使用前对其进行清理,并使用一个已知的前缀,例如:

filePath = filepath.Join(basePath,filepath.Clean(filePath))
f, err := os.Open(filePath)

那应该解决投诉。无论如何,这是一个合理的预防措施,即使您认为现在是安全的,以防以后有人将您的功能与用户数据一起使用。

答案 1 :(得分:1)

没有人说棉短绒是 smart 。孤立地查看功能,无法确定是否存在安全问题。如果使用由用户提供且未经充分验证的filePath调用该函数,则会在可以读取用户否则无法读取的文件的上下文中运行(例如,在一个具有较高特权的程序,或在远程服务器上),然后可能存在问题。否则,关于警告的唯一措施就是禁止或忽略警告。

答案 2 :(得分:0)

如果使用变量指定文件路径,则可能会指定意外的文件路径。因此,您应该使用filepath.Clean()清理可能的错误路径。

一个简单的解决方案:

f,err := os.Open(filepath.Clean(fname))

答案 3 :(得分:-1)

这解决了我的问题,可能通过变量(可信度:高,严重性:中)> ioutil.ReadFile(filePath)

var (
      readFileFunc= ioutil.ReadFile
    )

data, err:= readFileFunc(cleanFilePath)