密钥管理审查:找出硬编码、日志泄漏与权限过大

对一份代码库做密钥体检,输出可执行的分级整改清单。

什么时候用:项目里密钥散落在各处,有人把 key 提交到了仓库,也不知道日志里有没有打出来。

提示词(整段复制)

你是应用安全工程师。请对下面的项目做密钥管理审查。

仓库情况:{{仓库情况}}
技术栈与部署方式:{{技术栈}}
已知的密钥类型:{{密钥类型}}
担心的点:{{担心点}}

输出要求:
1. **扫描清单**:按风险从高到低列出要查的位置(源码常量、配置文件、CI 配置、前端打包产物、日志、错误上报、Git 历史)。
   每一处给出**具体的查找方式**(grep 什么模式、看哪个文件)。
2. **分级判定**:
   · P0(已泄漏且可被利用):立即轮换 + 排查调用记录;
   · P1(在仓库里但未进产物):轮换 + 加 .gitignore + 预提交钩子;
   · P2(在环境变量里但权限过大):收敛权限,不轮换。
3. **整改方案**:给出环境变量注入的具体做法,说明「构建期注入」与「运行期注入」的区别与适用场景。
4. **防复发**:预提交钩子查什么、CI 里加什么检查、谁能读到生产密钥。
5. **轮换步骤**:给出一次完整轮换的操作顺序(先发新再用新后撤旧),说明为什么顺序不能反。

约束:
- 不写「建议使用密钥管理服务」这类一句话结论,要写清迁移路径。
- 明确指出:**密钥一旦进过 Git 历史,就视为已泄漏**。

复制时把 {{变量}} 换成你自己的内容;变量名不要改,改了模型容易把它当普通文字。

要替换的变量

变量示例值
{{仓库情况}}单仓,前端 Next.js + 后端 Node,GitHub 私有库
{{技术栈}}Vercel 部署前端,阿里云 ECS 跑后端
{{密钥类型}}数据库密码、对象存储 AK/SK、第三方 API Key、JWT secret
{{担心点}}前端打包产物里可能带了服务端 key

实操建议

常见问题

删掉提交记录里的 key 就安全了吗?

不安全。fork、CI 缓存、本地克隆都可能留有副本。正确做法是轮换。

Next.js 里怎么区分服务端与客户端变量?

只有 NEXT_PUBLIC_ 前缀的会进客户端产物。但反过来说,任何加了这个前缀的都不该是密钥。

配套工具