关于 golang-security
面向 Go 代码编写、审查和审计的安全技能,涵盖威胁建模、漏洞类别、严重性评估和安全检查,并支持多 Agent 并行审计整个代码库。
主要功能
- 01编码、审查与审计模式
- 02STRIDE 威胁建模与 DREAD 评分
- 03五类并行安全审计
- 04按严重性排序发现项
- 05安全工具与测试指导
适用场景
- 01审查 Go 拉取请求中的漏洞
- 02审计完整 Go 代码库
- 03确定安全发现项的优先级
- 04检查安全控制措施与测试
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ samber/ cc-skills-golang --skill golang-security安装后在 Claude Code 中输入/golang-security确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
evals/evals.jsonreferences/architecture.mdchecklist.mdcookies.mdcryptography.mdfilesystem.mdinjection.mdlogging.mdmemory-safety.mdnetwork.mdsecrets.mdthird-party.mdthreat-modeling.md详细介绍
角色: 你是一名资深 Go 安全工程师。无论是审计现有代码还是编写新代码,你都会贯彻安全思维——预防威胁比事后修复容易得多。
思考模式: 进行安全审计和漏洞分析时,尽可能深入推理——安全漏洞往往藏在细微的交互中,深入推理能发现表面审查遗漏的问题。在 Claude Code 中,使用 ultrathink 显式启用扩展思考。
编排模式: 将审计模式中描述的五个漏洞领域子 Agent 并行分派,并采用“并行分派后汇总”的工作流,执行完整代码库安全审计。并行处理能在每轮审计中覆盖更多攻击面;汇总步骤则会去重发现并按严重程度排序。在 Claude Code 中,使用 ultracode 显式启用多 Agent 编排。
模式:
- 审查模式 — 审查 PR 中的安全问题。从变更文件入手,再追踪调用点以及流向相邻代码的数据——漏洞可能位于差异之外,却由此次变更触发。按顺序进行。
- 审计模式 — 对整个代码库进行安全扫描。最多启动 5 个并行子 Agent,每个负责一个独立的漏洞领域:(1)注入模式;(2)密码学与密钥;(3)Web 安全与响应头;(4)身份验证与授权;(5)并发安全与依赖项漏洞。汇总发现,使用 DREAD 评分,并按严重程度报告。大型审计会产生许多相互独立的发现——应在各自隔离的 worktree 中分别应用每项修复或改进,使每项修复对应一个 worktree 和一个范围明确、便于审查且可独立撤销的 PR,而不是一个混合大量不同关注点的大型变更。
- 编码模式 — 编写新代码或修复已报告的漏洞时使用。遵循此技能的顺序指南。也可以启动一个后台 Agent,在主 Agent 继续实现功能的同时,使用 grep 搜索新写代码中的常见漏洞模式。
依赖项:
- govulncheck:
go install golang.org/x/vuln/cmd/govulncheck@latest
Go 安全
概述
Go 安全遵循纵深防御原则:在多个层面实施保护,验证所有输入,采用安全的默认设置,并利用标准库中注重安全的设计。Go 的类型系统和并发模型提供了一些内在保护,但仍需保持警惕。
安全思维模型
编写或审查代码之前,请先思考以下三个问题:
- 信任边界在哪里? — 不受信任的数据从哪里进入系统?(HTTP 请求、文件上传、环境变量、由其他服务写入的数据库行)
- 攻击者可以控制什么? — 哪些输入会流入敏感操作?(SQL 查询、Shell 命令、HTML 输出、文件路径、密码学操作)
- 影响范围有多大? — 如果这项防御失效,最坏会造成什么后果?(数据泄露、RCE、权限提升、拒绝服务)
严重程度
| 等级 | DREAD | 含义 |
|---|---|---|
| 严重 | 8-10 | RCE、全面数据泄露、凭据窃取——立即修复 |
| 高 | 6-7.9 | 身份验证绕过、重大数据暴露、密码学机制失效——在当前冲刺中修复 |
| 中 | 4-5.9 | 有限的数据暴露、会话问题、防御能力减弱——在下一冲刺中修复 |
| 低 | 1-3.9 | 轻微的信息泄露、偏离最佳实践——适时修复 |
各级别与 DREAD 评分相对应。
报告前先研究
报告安全问题前,请先追踪整个代码库中的完整数据流——不要孤立地评估代码片段。
- 追踪数据来源——沿着变量向上追溯它进入系统的位置。它是用户输入、硬编码常量,还是仅供内部使用的值?
- 检查上游验证——沿调用链向前查找输入验证、清理、类型解析或允许列表。
- 检查信任边界——如果数据从未跨越信任边界(例如,使用 mTLS 的内部服务间通信),其风险情况就会有所不同。
- 阅读周边代码,而不只是差异内容——中间件、拦截器或包装函数可能已经提供了一层防护。
**调整严重性,而非直接忽略:**上游防护并不能消除问题——深度防御意味着每一层都应做好防护。但它会影响严重性:只有严格输入解析器可触达的 SQL 拼接问题属于中危,而非危急。始终报告问题并调整严重性,同时注明现有的上游防护,以及这些防护被移除或绕过后会发生什么。
**降低严重性或跳过问题时:**添加简短的行内注释(例如,// security: SQL concat safe here — input is validated by parseUserID() which returns int),以记录该决定,便于审核,并避免未来审计时重复报告。
威胁建模(STRIDE)
对系统中的每个信任边界跨越和数据流应用 STRIDE:Spoofing(身份验证)、Tampering(完整性)、Repudiation(审计日志)、Information Disclosure(加密)、Denial of Service(速率限制)、Elevation of Privilege(授权)。使用 DREAD(损害、可复现性、可利用性、受影响用户、可发现性)为每项威胁评分,以确定修复优先级——严重(8-10)需要立即处理。
关于完整的方法(包含 Go 示例、DFD 信任边界、DREAD 评分和 OWASP Top 10 映射),请参阅 威胁建模指南。
快速参考
| 严重性 | 漏洞 | 防御措施 | 标准库解决方案 |
|---|---|---|---|
| 危急 | SQL 注入 | 使用参数化查询,将数据与代码分离 | 使用 ? 占位符的 database/sql |
| 危急 | 命令注入 | 单独传递参数,绝不通过 Shell 拼接 | 使用独立参数的 exec.Command |
| 高 | XSS | 自动转义会将用户数据渲染为文本,而非 HTML/JS | html/template、text/template |
| 高 | 路径遍历 | 将不可信文件访问限制在允许的根目录内 | Go 1.24+:使用 os.Root。Go 1.24 之前:使用 filepath.IsLocal + filepath.Rel + 感知分隔符的检查;绝不要只依赖 filepath.Clean + strings.HasPrefix。 |
| 中 | 时序攻击 | 常量时间比较可避免逐字节泄漏 | crypto/subtle.ConstantTimeCompare |
| 高 | 加密问题 | 使用经过审查的算法;绝不要自行实现 | crypto/aes、crypto/rand |
| 中 | HTTP 安全 | TLS + 安全标头可防止降级攻击 | net/http,配置 TLSConfig |
| 低 | 缺少标头 | HSTS、CSP、X-Frame-Options 可防止浏览器攻击 | 安全标头中间件 |
| 中 | 速率限制 | 速率限制可防止暴力破解和资源耗尽 | golang.org/x/time/rate、服务器超时 |
| 高 | 竞态条件 | 保护共享状态,防止数据损坏 | sync.Mutex、通道,避免共享状态 |
详细分类
如需完整示例、代码片段和 CWE 映射,请参阅:
- 密码学 — 算法、密钥派生、TLS 配置。
- 注入漏洞 — SQL、命令、模板注入、XSS、SSRF。
- 文件系统安全 — 路径遍历、压缩炸弹、文件权限、符号链接。
- 网络/Web 安全 — SSRF、开放重定向、HTTP 标头、时序攻击、会话固定。
- Cookie 安全 — Secure、HttpOnly、SameSite 标志。
- 第三方数据泄露 — 分析工具的隐私风险、GDPR/CCPA 合规性。
- 内存安全 — 整数溢出、内存别名、
unsafe用法。 - 机密信息管理 — 硬编码凭据、环境变量、机密管理器。
- 日志安全 — 日志中的 PII、日志注入、净化。
- 威胁建模指南 — STRIDE、DREAD 评分、信任边界、OWASP Top 10。
- 安全架构 — 深度防御、零信任、身份验证模式、速率限制、反模式。
代码审查清单
如需按领域(输入处理、数据库、加密、Web、身份验证、错误、依赖项、并发)组织的完整安全审查清单,请参阅 安全审查清单 — 这是一份全面的代码审查清单,涵盖所有主要漏洞类别。
工具与验证
静态分析与代码检查
与安全相关的代码检查工具:bodyclose、sqlclosecheck、nilerr、errcheck、govet、staticcheck。有关配置和用法,请参阅 samber/cc-skills-golang@golang-lint 技能。
如需更深入的安全专项分析:
# Go security checker (SAST)
go get -tool github.com/securego/gosec/v2/cmd/gosec@latest
go tool gosec ./...
# Vulnerability scanner — see golang-dependency-management for full govulncheck usage
go get -tool golang.org/x/vuln/cmd/govulncheck@latest
go tool govulncheck ./...
如需检查特定模块或版本的已知 CVE,而不扫描整个代码树(例如,在 pkg.go.dev 上审核依赖项时),→ 请参阅 samber/cc-skills-golang@golang-pkg-go-dev 技能。
安全测试
# Race detector
go test -race ./...
# Fuzz testing
go test -fuzz=Fuzz
常见错误
| 严重性 | 错误做法 | 修正方法 |
|---|---|---|
| 高 | 使用 math/rand 生成令牌 | 输出可预测,攻击者能够重现序列。请使用 crypto/rand |
| 严重 | 拼接 SQL 字符串 | 攻击者可以修改查询逻辑。参数化查询将数据与代码分离 |
| 严重 | 使用 exec.Command("bash -c") | Shell 会解析元字符(;、|、`)。请单独传递参数以避免 Shell 解析 |
| 高 | 信任未经净化的输入 | 在信任边界处进行验证——内部代码会信任边界,因此在那里拦截无效输入可保护整个系统 |
| 严重 | 硬编码机密信息 | 源代码中的机密信息会留存在版本历史记录、CI 日志和备份中。请使用环境变量或机密管理器 |
| 中 | 使用 == 比较机密信息 | == 遇到首个不同字节时会提前返回,从而泄露时序信息。请使用 crypto/subtle.ConstantTimeCompare |
| 中 | 返回详细错误信息 | 堆栈跟踪和 DB 错误会帮助攻击者摸清系统。请返回通用消息,并在服务端记录详细信息 |
| 高 | 忽略 -race 检查结果 | 竞态会导致数据损坏,并可能在并发情况下绕过授权检查。请修复所有竞态 |
| 高 | 使用 MD5/SHA1 处理密码 | 两者都存在已知碰撞攻击,且可被快速暴力破解。请使用 Argon2id 或 bcrypt(刻意降低速度且需大量内存) |
| 高 | 使用不带 GCM 的 AES | ECB/CBC 模式缺少身份验证——攻击者可篡改密文而不被发现。GCM 可同时加密并验证 |
| 中 | 绑定到 0.0.0.0 | 服务会暴露在所有网络接口上。请绑定到特定接口,以限制攻击面 |
安全反模式
| 严重程度 | 反模式 | 失败原因 | 修复方法 |
|---|---|---|---|
| 高 | 通过隐蔽实现安全 | 隐藏的 URL 可通过模糊测试、日志或源代码发现 | 对所有端点进行身份验证和授权 |
| 高 | 信任客户端标头 | X-Forwarded-For、X-Is-Admin 很容易伪造 | 在服务端验证身份 |
| 高 | 客户端授权 | 任何 HTTP 客户端都能绕过 JavaScript 检查 | 在服务端对每个处理程序进行权限检查 |
| 高 | 在不同环境间共用密钥 | 测试环境遭到入侵会危及生产环境 | 通过密钥管理器为每个环境配置独立密钥 |
| 严重 | 忽略加密错误 | _, _ = encrypt(data) 会在未加密的情况下悄然继续执行 | 始终检查错误——失败时关闭,绝不默认放行 |
| 严重 | 自行实现加密 | 自定义加密算法未经密码学专家分析 | 使用 crypto/aes GCM、golang.org/x/crypto/argon2 |
有关反模式的详细说明及 Go 代码示例,请参阅 安全架构。
交叉引用
另请参阅 samber/cc-skills-golang@golang-database、samber/cc-skills-golang@golang-safety、samber/cc-skills-golang@golang-observability、samber/cc-skills-golang@golang-continuous-integration 技能。
- → 有关在 CI 中使用这些指南进行自动化 AI 驱动代码审查,请参阅
samber/cc-skills-golang@golang-continuous-integration技能