Gosec 1.3.0报错:golang.org/x/term常量变量重复声明问题解决方案
Gosec 1.3.0报错:golang.org/x/term常量变量重复声明问题解决方案 我正在使用 gosec 1.3.0,Go 版本为 go1.12.17。golang.org/x/term 的修订版本为 “7de9c90e9dd184706b838f536a1cbf40a296ddb7”。
当我使用 gosec 扫描文件时,它报告常量变量被重复声明。
./vendor/golang.org/x/term/term_unix_linux.go:9:7: ioctlReadTermios redeclared in this block
./vendor/golang.org/x/term/term_unix_aix.go:9:7: other declaration of ioctlReadTermios
./vendor/golang.org/x/term/term_unix_linux.go:10:7: ioctlWriteTermios redeclared in this block
./vendor/golang.org/x/term/term_unix_aix.go:10:7: other declaration of ioctlWriteTermios
go build 是成功的。我想知道如何绕过或忽略 gosec 的这些警告。
谢谢!
更多关于Gosec 1.3.0报错:golang.org/x/term常量变量重复声明问题解决方案的实战教程也可以访问 https://www.itying.com/category-94-b0.html
我认为这是一个版本兼容性问题,可以通过升级版本来解决。
太好了!您能否选择合适的帖子并将其“标记为解决方案”,尤其是与安全相关的问题?这有助于其他人停止跟踪或继续处理当前的问题。
提前感谢。
感谢 hollowaykeanho,
我已经尝试使用 gosec 版本 v2.5.0,配合 -e GO111MODULE=off 环境变量,以及 go 版本 1.12.17。现在它可以正常工作了。我相信这是一个版本兼容性问题,可以通过升级版本来解决。
再次感谢!
欢迎来到 Golang Bridge 🚀 🎆。
一般来说,我会认真调查 gosec 的所有警告和报告,并进行彻底的根因分析。然而,对于这种情况,仍然存在一些值得商榷的方面。接下来的几个步骤至关重要:
- 将您的工具包升级到最新版本,并检查其可复现状态。
1.1. gosec 当前版本为
2.5.0(https://github.com/securego/gosec) 1.2. Go 当前版本为1.15.6(Go 1.15.6 and Go 1.14.13 are released) - 如果问题可以复现,首先向
gosec团队提交一个标记为“QUESTION”的问题工单,并附上使用最新工具的结果。他们通常会较快地回复您的查询。 - 如果他们建议联系 Go 开发团队,您可以在 golang 的 Github 上提交工单之前,先发送邮件至 https://groups.google.com/forum/#!forum/golang-nuts。然后,遵循那里 Go 核心开发者的建议(如果他们要求您提交工单,您可以照做)。
除了回答 Go 编程问题外,我们在这里能做的也不多。
如果上述步骤过于繁琐,您也可以考虑使用 golang.org/x 扩展包中的其他终端包。
这个问题是由于gosec在扫描vendor目录时检测到多个文件中的相同常量声明导致的。虽然这些声明在不同平台文件中是合法的,但gosec会将其误报为重复声明。
解决方案是配置gosec排除vendor目录或特定文件。以下是具体方法:
方法1:使用gosec配置文件
创建.gosec.json配置文件:
{
"exclude-dirs": ["vendor"],
"exclude-files": [".*_unix_.*\\.go$"]
}
然后运行:
gosec -config .gosec.json ./...
方法2:命令行排除vendor目录
gosec -exclude-dir=vendor ./...
方法3:使用注释忽略特定文件
在代码中添加gosec忽略注释:
// #nosec G103
// 这个文件包含平台特定的常量声明
package term
方法4:使用gosec的skip参数
gosec -skip="vendor" ./...
方法5:创建自定义规则文件
创建gosec-rules.json:
{
"G103": {
"message": "Ignore duplicate declarations in platform files",
"severity": "low",
"confidence": "low",
"exclude": [
"vendor/golang.org/x/term/term_unix_.*\\.go"
]
}
}
运行:
gosec -rules=gosec-rules.json ./...
方法6:直接修改gosec命令忽略特定错误
gosec -exclude="G103" ./...
对于你的具体版本(gosec 1.3.0 + Go 1.12.17),推荐使用方法2,因为它最简单直接:
gosec -exclude-dir=vendor ./...
或者如果你需要扫描vendor但忽略这个特定问题:
gosec -exclude="G103" ./...
这些常量声明(ioctlReadTermios和ioctlWriteTermios)在不同平台文件中重复是Go构建系统的正常行为,构建工具会根据目标平台选择正确的文件。gosec的警告是误报,可以安全忽略。


