如何解决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)
}
我已经尝试阅读本地文件包含的内容,但是看不到这里的适用范围。
答案 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)