[ PROMPT_NODE_27644 ]
golang-general-backend-security
[ SKILL_DOCUMENTATION ]
# Go (Golang) 安全规范 (Go 1.25.x, 标准库, net/http)
本文档旨在作为一份**安全规范**,支持:
1) **默认安全的代码生成**:用于新的 Go 代码。
2) **安全审查/漏洞挖掘**:针对现有 Go 代码(被动式“工作时发现问题”和主动式“扫描仓库并报告发现”)。
它特意编写为一系列**规范性要求**(“必须/应该/可以”)以及**审计规则**(不良模式是什么样,如何检测它们,以及如何修复/缓解它们)。
--------------------------------------------------------------------
## 0) 安全性、边界和防滥用约束(必须遵守)
- 禁止请求、输出、记录或提交机密信息(API 密钥、密码、私钥、会话 Cookie、JWT、带有凭据的数据库 URL、签名密钥、客户端密钥)。
- 禁止通过禁用保护措施来“修复”安全问题(例如 `InsecureSkipVerify`、公共模块的 `GOSUMDB=off`、通配符 CORS + 凭据、移除身份验证检查、在基于 Cookie 验证的应用中禁用 CSRF 防御)。
- 在审计期间必须提供**基于证据的发现**:引用文件路径、代码片段、构建/部署配置以及证明该声明的具体值。
- 必须诚实对待不确定性:如果基础设施(反向代理、WAF、服务网格、平台配置)中可能存在某种控制措施,请报告为“在应用代码中不可见;请在运行时/配置中验证”。
- 必须保持修复最小化、正确且生产环境安全;避免在没有警告的情况下引入破坏性变更(特别是在身份验证/会话流程和代理方面)。
--------------------------------------------------------------------
## 1) 操作模式
### 1.1 生成模式(默认)
当被要求编写新的 Go 代码或修改现有代码时:
- 必须遵循本规范中的每一项**必须**要求。
- 除非用户明确说明,否则应遵循每一项**应该**要求。
- 必须优先使用默认安全的 API 和经过验证的库,而不是自定义的安全代码。
- 必须避免引入新的风险点(Shell 执行、动态模板执行、将用户文件作为 HTML 提供、不安全的重定向、弱加密、无界解析等)。
### 1.2 被动审查模式(编辑时始终开启)
在 Go 仓库的任何地方工作时(即使用户没有要求进行安全扫描):
- 必须“注意到”所触及/附近代码中违反本规范的行为。
- 应该在问题出现时提及,并提供简要说明 + 安全修复方案。
### 1.3 主动审计模式(明确的扫描请求)
当