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

5 回复

解决方案已标记。谢谢。

更多关于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.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)
  2. 如果问题可以复现,首先向 gosec 团队提交一个标记为“QUESTION”的问题工单,并附上使用最新工具的结果。他们通常会较快地回复您的查询。
  3. 如果他们建议联系 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" ./...

这些常量声明(ioctlReadTermiosioctlWriteTermios)在不同平台文件中重复是Go构建系统的正常行为,构建工具会根据目标平台选择正确的文件。gosec的警告是误报,可以安全忽略。

回到顶部