繁体   English   中英

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

[英]How to handle gosec linter warning: Potential file inclusion via variable

如何解决来自gosec linter的以下警告:

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

linter 在此函数的第一行警告我:

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)
}

我曾尝试阅读有关本地文件包含的内容,但看不到它在此处的适用性。

路径从何而来? 如果您不确定它永远不会有用户输入,最好在使用前清理它并使用已知前缀,例如:

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

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

没有人说 linter 很聪明 孤立地看功能,不可能说是否存在安全问题。 如果使用用户提供filePath充分验证的文件路径调用该函数,并且它在可以读取用户无法以其他方式读取的文件的上下文中运行(例如,在具有提升权限的程序中,或在远程服务器上),可能存在问题。 否则,对警告唯一要做的就是抑制或忽略它。

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

一个简单的解决方案:

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

如何解决来自gosec linter的以下警告:

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

linter 在这个函数的第一行警告我:

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)
}

我曾尝试阅读本地文件包含,但不知道这将如何适用于这里。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM