一行代码,8 万没了
某开发者在代码中硬编码了 AWS 密钥,推送到 GitHub 公开仓库。
几小时后,攻击者发现密钥,启动了大量云服务器用于挖矿。
账单:8 万美元。
这不是个例,类似事件每天都在发生。
API 密钥泄露的 4 个途径
途径一:GitHub 公开仓库
场景: 代码推送到 GitHub,含 API 密钥。
风险:
- 攻击者用工具自动扫描 GitHub
- 发现密钥后立即利用
- 从推送密钥到被利用,平均不到 1 小时
途径二:前端代码
场景: 前端代码中包含 API 密钥。
风险:
- 前端代码是公开的,任何人都能查看
- 浏览器开发者工具就能看到
- 密钥一旦暴露,无法撤回
途径三:配置文件泄露
场景: .env 文件被推送到仓库。
风险:
.env文件通常包含所有密钥- 一旦泄露,所有密钥暴露
- 影响范围极大
途径四:日志输出
场景: 日志中打印了 API 密钥。
风险:
- 日志可能被他人查看
- 日志可能被发送到监控系统
- 密钥在日志中无法撤回
API 密钥泄露的后果
| 密钥类型 | 可能后果 |
|---|---|
| AWS AKSK | 云资源被盗用,产生费用 |
| OpenAI API Key | 额度被盗用 |
| Stripe Key | 支付数据泄露 |
| SendGrid Key | 被用来发垃圾邮件 |
| GitHub Token | 仓库被篡改 |
| 数据库密码 | 数据泄露 |
如何安全管理 API 密钥?
1. 使用环境变量
错误:
api_key = "sk-abc123def456"
正确:
import os
api_key = os.environ.get("API_KEY")
2. 使用密钥管理服务
- AWS Secrets Manager
- Azure Key Vault
- HashiCorp Vault
- 环境变量管理工具(如 dotenv)
3. 使用 .gitignore
.env
config/secrets.yml
*.pem
*.key
4. 使用预提交钩子
安装 git-secrets,在提交前自动检查:
git-secrets --register-aws
5. 定期轮换密钥
- 定期更换 API 密钥
- 发现泄露后立即轮换
- 为不同环境使用不同密钥
密钥泄露后的应急处理
- 立即撤销泄露的密钥
- 生成新密钥
- 更新所有使用该密钥的服务
- 检查是否有异常使用
- 记录事件,分析原因
一句话总结
API 密钥别写死在代码里,用环境变量和密钥管理服务。推送前用工具扫描,泄露后立即撤销轮换。
标签: 开发安全、API密钥、代码安全、信息安全意识