API 密钥裸奔:一次失误损失 8 万

发布时间:2026-06-26 分类: 安全意识

一行代码,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 密钥
  • 发现泄露后立即轮换
  • 为不同环境使用不同密钥

密钥泄露后的应急处理

  1. 立即撤销泄露的密钥
  2. 生成新密钥
  3. 更新所有使用该密钥的服务
  4. 检查是否有异常使用
  5. 记录事件,分析原因

一句话总结

API 密钥别写死在代码里,用环境变量和密钥管理服务。推送前用工具扫描,泄露后立即撤销轮换。


标签: 开发安全、API密钥、代码安全、信息安全意识