根据 Apache 许可,版本 2.0(“许可”)获得许可。除非遵守许可,否则您不得使用此文件。您可以在此处获得许可的副本。 # 二进制文件将是 $(go env GOPATH)/bin/goseccurl -sfL https://raw.githubusercontent.com/securego/gosec/master/install.sh | sh -s -- -b $(go env GOPATH )/bin vX.YZ # 或安装到 ./bin/curl -sfL https://raw.githubusercontent.com/securego/gosec/master/install.sh | sh -s vX.YZ # 在 alpine linux 中(因为它默认没有 curl)wget -O - -q https://raw.githubusercontent.com/securego/gosec/master/install.sh | sh -s vX.YZ # 如果你想使用“版本”页面上提供的校验和 # 那么你必须为你的操作系统下载一个 tar.gz 文件而不是二进制文件wget https://github.com/ securego/gosec/releases/download/vX.YZ/gosec_vX.Y.Z_OS.tar.gz # 该文件将在您运行命令的当前文件夹中 # 您可以像这样检查校验和 echo "<check sum from校验和文件> gosec_vX.Y.Z_OS.tar.gz" | sha256sum -c -gosec --help 名称:运行 Gosec:推送:分支:-主 pull_request:分支:-主作业:测试:运行:ubuntu-latest env:GO111MODULE:步骤:-名称:结帐源使用: actions/checkout@v2 - name: Run Gosec Security Scanner uses: securego/gosec@master with: args: ./... 您可以通过将数据上传为 SARIF 文件来将第三方代码分析工具与 GitHub 代码扫描集成。该工作流显示了运行 gosec 作为 GitHub 操作工作流中的一个步骤的示例,该工作流输出 results.sarif 文件。然后,工作流使用 upload-sarif 操作将 results.sarif 文件上传到 GitHub。 name: "Security Scan " # 每次代码按计划推送到您的存储库时运行工作流。 # 计划的工作流在每周日 UTC 时间的 00:00 运行。 on: push: schedule: - cron: '0 0 * * 0 ' jobs: tests: running-on: ubuntu-latest env: GO111MODULE: on steps: - name: Checkout Source uses: actions/checkout@v2 - name: Run Gosec 安全扫描器使用:securego/gosec@master 与:# 我们让报告触发内容使用 GitHub 安全功能触发故障。 args: '-no-fail -fmt sarif -out results.sarif ./... ' - name: 上传 SARIF 文件使用:github/codeql-action/upload-sarif@v1 with: # SARIF 文件相对于存储库 sarif_file 的根目录:results.sarif Gosec 可以配置为仅运行一部分规则,排除某些文件路径,并生成不同格式的报告。默认情况下,所有规则都将针对提供的输入文件运行。要从当前目录递归扫描,您可以提供 ./... 作为输入参数。
默认情况下,gosec 将针对提供的文件路径运行所有规则。然而,可以通过 -include= 标志选择要运行的规则子集,或者使用 -exclude= 标志指定一组规则以明确排除。 # 运行一组特定的规则 $ gosec -include=G101,G203,G401 ./... # 运行除规则 G303 之外的所有内容$ gosec -exclude=G303 ./... gosec 检测到的每个问题都映射到 CWE (Common Weakness Enumeration),它用更通用的术语描述了漏洞。可以在此处找到确切的映射。审计:在审计模式下运行,它启用额外的检查,对于正常的代码分析可能太爱管闲事了还有一些规则接受配置。例如,在规则 G104 上,可以定义包以及在审核未检查错误时将跳过的函数列表:您还可以使用其他模式配置硬编码凭据规则 G101,或调整熵阈值:gosec当 go 模块打开时,将自动获取正在分析的代码的依赖项(例如 GO111MODULE=on)。如果不是这种情况,则需要在扫描前通过运行 go get -d 命令明确下载依赖项。
gosec 将忽略所有包中的测试文件和供应商目录中的任何依赖项。与所有自动检测工具一样,也会出现误报的情况。如果 gosec 报告已手动验证为安全的故障,则可以使用 #nosec 注释对代码进行注释。注释导致 gosec 停止处理 AST 中的任何其他节点,因此可以应用于整个块或更细粒度地应用于单个表达式。 import "md5" // #nosec func main(){ /* #nosec */ if x > y { h := md5. New() // 这也将被忽略 }} 当特定的误报已被识别并验证为安全时,您可能希望在一段代码中仅抑制该单个规则(或一组特定规则),同时继续扫描其他问题。为此,您可以在 #nosec 注释中列出要禁止的规则,例如:/* #nosec G401 */ 或 // #nosec G201 G202 G203 在某些情况下,您可能还想重新访问 #nosec已使用注释。要运行扫描器并忽略任何 #nosec 注释,您可以执行以下操作:gosec 能够将您的 Go 构建标记传递给分析器。它们可以作为逗号分隔列表提供,如下所示:
gosec 目前支持 text、json、yaml、csv、sonarqube、JUnit XML、html 和 golint 输出格式。默认情况下,结果将报告给标准输出,但也可以写入输出文件。输出格式由 -fmt 标志控制,输出文件由 -out 标志控制,如下所示:结果将通过 -stdout 标志报告给 stdout 和提供的输出文件。 -verbose 标志在输出结果时覆盖输出格式,同时将结果保存在输出文件中 # 以 json 格式将输出写入 results.json 以及 stdout$ gosec -fmt=json -out=results.json -stdout *.go #在标准输出结果时将输出格式覆盖为“文本”,同时将其写入 results.json$ gosec -fmt=json -out=results.json -stdout -verbose=text *.go 注意:gosec 生成通用问题导入格式对于 SonarQube,必须使用 sonar.externalIssuesReportPaths=path/to/gosec-report.json 将报告导入 SonarQube。大多数 MarshallJSON/UnmarshalJSON 都被删除了,除了 PropertyBag 的一个,它可以方便地内联附加属性。其余的可以删除。URI、ID、UUID、GUID 已重命名,因此它符合此处定义的 Golang 约定。将标签推送到上游后,GitHub 发布工作流会立即触发。此流程将使用 goreleaser 操作发布二进制文件,然后它将构建 docker 镜像并将其发布到 Docker Hub。您可以在容器中针对本地 Go 项目运行 gosec 工具。您只需将项目挂载到一个卷中,如下所示:
注意:当前工作目录需要使用 -w 选项设置才能成功解析来自 go 模块文件的依赖关系 这将生成 rules/tls_config.go 文件,其中将包含来自 Mozilla 的当前密码建议。