为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
aluckdog 2023-04-04 14:43:09
如何解决来自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)}我曾尝试阅读有关本地文件包含的内容,但看不到它在此处的适用性。
查看完整描述

3 回答

?
慕的地10843

TA贡献1785条经验 获得超8个赞

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

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

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


查看完整回答
反对 回复 2023-04-04
?
qq_花开花谢_0

TA贡献1835条经验 获得超7个赞

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



查看完整回答
反对 回复 2023-04-04
?
翻过高山走不出你

TA贡献1875条经验 获得超3个赞

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

一个简单的解决方案:

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


查看完整回答
反对 回复 2023-04-04
  • 3 回答
  • 0 关注
  • 309 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信