Skip to content
KitploitKITPLOIT
工具漏洞利用博客
Log in
提交
工具漏洞利用博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

订阅源联系隐私© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
gosec — Go 安全检查器 | Kitploit
工具/GitHubGitHub/securego/gosec
静态代码分析 (SAST)漏洞分析代码分析DevSecOps代码分析 分类第 9 名静态代码分析 (SAST) 分类第 6 名
GitHubsecurego/gosec

gosec

Go 安全检查器

查看仓库
8.9k70112217小时22分前Kitploit 审核通过

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享
网站

gosec - Go 安全检查器

通过扫描 Go AST 和 SSA 代码表示来检查源代码中的安全问题。

快速链接

  • GitHub Action
  • 本地安装
  • 快速开始
  • 常见使用模式
  • 选择规则
  • 输出格式

特性

  • 基于模式的规则,用于检测 Go 代码中的常见安全问题
  • 基于 SSA 的分析器,用于类型转换、切片边界和加密问题
  • 污点分析,用于追踪从用户输入到危险函数的数据流(SQL 注入、命令注入、路径遍历、SSRF、XSS、日志注入、SMTP 注入、SSTI、不安全反序列化、开放重定向)

许可证

根据 Apache License, Version 2.0(“许可证”)授权。 除非遵守许可证,否则不得使用此文件。 您可以在此处获取许可证副本。

项目状态

CII Best Practices Build Status Coverage Status GoReport GoDoc Docs Downloads GHCR Slack go-recipes

安装

GitHub Action

您可以按如下方式将 gosec 作为 GitHub action 运行:

使用带有 @master 的版本化标签,该标签固定指向最新的稳定版本。这将提供稳定的行为。

name: Run Gosec
on:
  push:
    branches:
      - master
  pull_request:
    branches:
      - master
jobs:
  tests:
    runs-on: ubuntu-latest
    env:
      GO111MODULE: on
    steps:
      - name: Checkout Source
        uses: actions/checkout@v3
      - name: Run Gosec Security Scanner
        uses: securego/gosec@master
        with:
          args: ./...

扫描包含私有模块的项目

如果你的项目导入了私有 Go 模块,你需要配置身份验证,以便 gosec 能够获取这些依赖项。请在工作流中设置以下环境变量:

  • GOPRIVATE:以逗号分隔的模块路径前缀列表,这些前缀应被视为私有(例如 github.com/your-org/*)。
  • GITHUB_AUTHENTICATION_TOKEN:具有私有仓库读取权限的 GitHub 令牌。
name: Run Gosec
on:
  push:
    branches:
      - master
  pull_request:
    branches:
      - master
jobs:
  tests:
    runs-on: ubuntu-latest
    env:
      GO111MODULE: on
      GOPRIVATE: github.com/your-org/*
      GITHUB_AUTHENTICATION_TOKEN: ${{ secrets.PRIVATE_REPO_TOKEN }}
    steps:
      - name: Checkout Source
        uses: actions/checkout@v3
      - name: Run Gosec Security Scanner
        uses: securego/gosec@v2
        with:
          args: ./...

与代码扫描集成

你可以通过将数据作为 SARIF 文件上传,将第三方代码分析工具与 GitHub 代码扫描集成。

该工作流展示了一个示例:在 GitHub action 工作流中将 gosec 作为一步运行,并输出 results.sarif 文件。随后,该工作流使用 upload-sarif action 将 results.sarif 文件上传到 GitHub。

name: "Security Scan"

# Run workflow each time code is pushed to your repository and on a schedule.
# The scheduled workflow runs every at 00:00 on Sunday UTC time.
on:
  push:
  schedule:
  - cron: '0 0 * * 0'

jobs:
  tests:
    runs-on: ubuntu-latest
    env:
      GO111MODULE: on
    steps:
      - name: Checkout Source
        uses: actions/checkout@v3
      - name: Run Gosec Security Scanner
        uses: securego/gosec@v2
        with:
          # we let the report trigger content trigger a failure using the GitHub Security features.
          args: '-no-fail -fmt sarif -out results.sarif ./...'
      - name: Upload SARIF file
        uses: github/codeql-action/upload-sarif@v2
        with:
          # Path to SARIF file relative to the root of the repository
          sarif_file: results.sarif

Go 分析

goanalysis 包提供了一个 golang.org/x/tools/go/analysis.Analyzer, 用于与支持标准 Go 分析接口的工具集成,例如 Bazel 的 nogo 框架:

nogo(
    name = "nogo",
    deps = [
        "@com_github_securego_gosec_v2//goanalysis",
        # add more analyzers as needed
    ],
    visibility = ["//visibility:public"],
)

本地安装

gosec 需要 Go 1.25 或更高版本。

go install github.com/securego/gosec/v2/cmd/gosec@latest

快速开始

# Scan all packages in current module
gosec ./...

# Write JSON report
gosec -fmt json -out results.json ./...

# Write SARIF report for code scanning
gosec -fmt sarif -out results.sarif ./...

退出码

  • 0:扫描完成,没有未抑制的发现/错误
  • 1:至少有一个未抑制的发现或处理错误
  • 使用 -no-fail 以始终返回 0

用法

Gosec 可以配置为仅运行一部分规则、排除某些文件路径,并以不同格式生成报告。默认情况下,所有规则都会针对提供的输入文件运行。要从当前目录递归扫描,可以将 ./... 作为输入参数提供。

可用规则

gosec 包含以下类别的规则:

  • G1xx:通用安全编码问题(例如硬编码凭据、不安全用法、HTTP 加固、Cookie 安全)
  • G2xx:查询/模板/命令构造中的注入风险
  • G3xx:文件和路径处理风险(权限、路径遍历、临时文件、归档解压)
  • G4xx:加密和 TLS 弱点
  • G5xx:黑名单导入
  • G6xx:Go 特有的正确性/安全检查(例如 range 别名和切片边界)
  • G7xx:污点分析规则(SQL 注入、命令注入、路径遍历、SSRF、XSS、日志注入、SMTP 注入、SSTI、不安全反序列化和开放重定向)

有关完整列表、规则描述和逐规则配置,请参阅 RULES.md。

已停用规则

  • G105:审计 math/big.Int.Exp 的使用 - CVE 已修复
  • G307:延迟调用返回错误的方法 - 相比修复安全问题带来更多不便,尽管有这篇 博客文章 中的细节

选择规则

默认情况下,gosec 会针对提供的文件路径运行所有规则。不过,可以通过 -include= 标志选择要运行的规则子集,或使用 -exclude= 标志明确指定要排除的一组规则。

# Run a specific set of rules
$ gosec -include=G101,G203,G401 ./...

# Run everything except for rule G303
$ gosec -exclude=G303 ./...

CWE 映射

gosec 检测到的每个问题都会映射到一个 CWE(通用缺陷枚举), 它以更通用的术语描述该漏洞。确切的映射关系可以在 此处找到。

配置

可以在配置文件中提供若干全局设置,如下所示:

{
    "global": {
        "nosec": "enabled",
        "audit": "enabled"
    }
}
  • nosec:此设置将覆盖整个代码库中定义的所有 #nosec 指令
  • audit:以审计模式运行,该模式会启用一些额外的检查,而这些检查对于常规代码分析来说可能过于繁琐
# Run with a global configuration file
$ gosec -conf config.json .

基于路径的规则排除

包含多个组件的大型仓库可能需要针对不同路径应用不同的安全规则。使用 exclude-rules 来抑制特定路径下的特定规则。

配置文件:

{
  "exclude-rules": [
    {
      "path": "cmd/.*",
      "rules": ["G204", "G304"]
    },
    {
      "path": "scripts/.*",
      "rules": ["*"]
    }
  ]
}

CLI 标志:

# Exclude G204 and G304 from cmd/ directory
gosec --exclude-rules="cmd/.*:G204,G304" ./...

# Exclude all rules from scripts/ directory  
gosec --exclude-rules="scripts/.*:*" ./...

# Multiple exclusions
gosec --exclude-rules="cmd/.*:G204,G304;test/.*:G101" ./...
字段类型描述
pathstring (regex)与文件路径匹配的正则表达式
rules[]string要排除的规则 ID。* 表示全部

规则配置

部分规则还接受配置标志;这些标志记录在 RULES.md 中。

Go 版本

部分规则需要特定的 Go 版本,该版本从项目中存在的 Go 模块文件中获取。如果无法找到该版本,则会回退到 Go 运行时版本。

Go 模块版本通过 go list 命令解析,在某些情况下这可能导致性能下降。在这种情况下,可以通过设置环境变量 GOSECGOVERSION=go1.21.1 轻松提供 Go 模块版本。

依赖

gosec 使用 Go 模块加载包。在大多数项目中,依赖会在扫描期间自动解析。

如果缺少依赖,请运行:

go mod tidy
go mod download

排除测试文件和文件夹

gosec 将忽略所有包中的测试文件以及 vendor 目录中的任何依赖项。

可以使用以下标志启用对测试文件的扫描:

gosec -tests ./...

此外,还可以按如下方式排除其他文件夹:

 gosec -exclude-dir=rules -exclude-dir=cmd ./...

排除生成的文件

gosec 可以通过默认的生成代码注释来忽略生成的 go 文件。

// Code generated by some generator DO NOT EDIT.
下载工具