智站集市 logo 智站集市
使用技巧 入门 ⏱ 8 分钟 2026/05/18

API Key 安全使用指南:别让密钥泄露毁掉你的账户

API Key 泄露可能导致数千元被盗刷。本文覆盖存储、使用、监控、应急四个环节,给出可直接落地的安全实践。

安全 API Key 最佳实践 环境变量 密钥管理

API Key 是你调用 AI 模型的”钥匙”。一旦泄露,别人可以用你的额度无限发请求——轻则余额被刷空几千元,重则账号被封禁。这不是假设,GitHub 上每天都有人不小心提交密钥被自动扫描盗用。

泄露的真实代价

常见泄露途径

1. 代码提交到 Git 仓库

最常见的泄露方式。即使后来删除了提交,Git 历史中仍然保留。

# ❌ 绝对不要这样做
client = OpenAI(api_key="sk-proj-abc123xyz456...")

2. 前端代码暴露

浏览器的开发者工具可以看到所有 JavaScript 代码和网络请求。

// ❌ 前端直接调用 API,密钥对所有用户可见
fetch("https://api.openai.com/v1/chat/completions", {
  headers: { Authorization: "Bearer sk-xxx" }  // 任何人都能看到
});

3. 截图和聊天记录

在群里分享代码截图、在博客贴配置文件时忘记打码。

4. 日志输出

调试时把请求头打印到日志,日志文件被上传或共享。

5. 公开的配置文件

.env 文件没加 .gitignore,或者把配置文件放在了公开的 S3 bucket 里。

正确的密钥管理方式

环境变量(最基础)

把密钥存在环境变量中,代码里通过变量名读取。

创建 .env 文件

# .env(这个文件绝对不能提交到 Git)
OPENAI_API_KEY=sk-proj-你的密钥
DEEPSEEK_API_KEY=sk-你的DeepSeek密钥

Python 读取

import os
from openai import OpenAI

# 方式 1:直接读环境变量
client = OpenAI(api_key=os.environ["OPENAI_API_KEY"])

# 方式 2:用 python-dotenv 加载 .env 文件
from dotenv import load_dotenv
load_dotenv()
client = OpenAI(api_key=os.environ["OPENAI_API_KEY"])

Node.js 读取

import OpenAI from "openai";
import "dotenv/config";  // 自动加载 .env

const client = new OpenAI({
  apiKey: process.env.OPENAI_API_KEY,
});

.gitignore 配置

确保敏感文件永远不会被提交:

# 环境变量文件
.env
.env.local
.env.production
.env*.local

# IDE 配置(可能包含密钥)
.idea/
.vscode/settings.json

# 操作系统文件
.DS_Store
Thumbs.db

重要:如果 .env 已经被提交过,仅添加 .gitignore 不够,需要从 Git 历史中清除:

git rm --cached .env
git commit -m "Remove .env from tracking"
# 然后立即轮换(更换)已泄露的密钥

前端项目的正确做法

前端永远不应该直接持有 API Key。正确架构:

用户浏览器 → 你的后端服务器 → AI API

          密钥只存在这里

用一个简单的后端代理:

# Flask 示例:后端代理 AI 请求
from flask import Flask, request, jsonify
from openai import OpenAI
import os

app = Flask(__name__)
client = OpenAI(api_key=os.environ["OPENAI_API_KEY"])

@app.route("/api/chat", methods=["POST"])
def chat():
    user_message = request.json.get("message", "")
    
    # 可以在这里加入鉴权、限速、内容过滤等逻辑
    response = client.chat.completions.create(
        model="gpt-4o",
        messages=[{"role": "user", "content": user_message}],
        max_tokens=500  # 限制单次消费
    )
    return jsonify({"reply": response.choices[0].message.content})

生产环境:使用密钥管理服务

对于正式项目,环境变量不够安全(运维人员可以看到、容器日志可能泄露)。使用专门的密钥管理服务:

主动防护措施

设置消费上限

大多数 API 平台支持设置月度消费上限:

使用多个 Key 隔离用途

# 开发环境用一个 Key(设低额度)
DEV_API_KEY=sk-dev-xxx

# 生产环境用另一个 Key(设合理额度)
PROD_API_KEY=sk-prod-xxx

# 测试/CI 用独立 Key(设最低额度)
TEST_API_KEY=sk-test-xxx

定期轮换密钥

每 1~3 个月更换一次 Key,即使没有泄露迹象。步骤:

  1. 生成新 Key
  2. 更新所有使用该 Key 的服务
  3. 确认新 Key 工作正常
  4. 删除旧 Key

监控异常用量

定期检查 API 用量仪表盘:

发现泄露后的应急步骤

如果怀疑密钥已泄露,按以下顺序操作:

  1. 立即撤销:在平台控制台删除/禁用该 Key(不是明天,是现在)
  2. 生成新 Key:创建新密钥替换
  3. 检查账单:查看是否有异常消费,联系平台客服申诉
  4. 排查来源:确认泄露途径(Git 历史?日志?截图?)
  5. 修复根因:加 .gitignore、清理 Git 历史、修改架构
  6. 通知相关方:如果是团队项目,通知所有使用该 Key 的同事

检查清单

在你的项目中逐项确认: