跳到內容

入門★★★★5 分鐘閱讀

什麼是 API key?怎麼用才不會外洩

API key 就是你連 OpenAI、Anthropic 這類付費服務的密碼。外洩等於陌生人花你的錢 — 而且幾乎每個人都至少漏過一次。

登入以收藏

API key 是一串長隨機字串,讓你的 code 對付費服務驗證身份。當你呼叫 OpenAI、Anthropic、Resend、Stripe 或任何現代 API,請求 header 會帶 Authorization: Bearer sk-... — 那個 sk-... 就是 key。誰拿到誰就能用你的帳號花錢,當信用卡號看待。

API key 到底是什麼

機械上,就是一串長字串(通常 40-100 字元),provider 產生,你 copy 進 app。這個 key:

  • 識別是哪個帳號發 request(provider 才知道這筆錢算誰)
  • 通常帶 scope / 權限(唯讀、完整、限定專案等)
  • 外洩時可以撤銷、輪替

不同服務有不同前綴:

  • OpenAI:sk-proj-...(專案 key)或 sk-...(舊版 user key)
  • Anthropic:sk-ant-api03-...
  • Resend:re_...
  • Stripe:sk_live_...sk_test_...
  • Supabase:JWT 或 sbp_... PAT

前綴是給人類看的提示,真正的祕密是整串。

怎麼實際使用

基本流程:

  1. 進 provider 的 dashboard(platform.openai.comconsole.anthropic.com 等)
  2. 建立 API key,複製。通常只看得到一次 — provider 只存 hash,不存原文。
  3. 放進 app。絕對不要寫死在 source code。
  4. 用 SDK(Python、TypeScript)或 raw HTTP 呼叫。

TypeScript 用 Anthropic 的最小範例:

import Anthropic from "@anthropic-ai/sdk";

const client = new Anthropic({
  apiKey: process.env.ANTHROPIC_API_KEY, // 永遠不要寫死
});

const msg = await client.messages.create({
  model: "claude-sonnet-4",
  max_tokens: 1024,
  messages: [{ role: "user", content: "Hello" }],
});

Key 放在環境變數 — process.env.ANTHROPIC_API_KEY — 開發時設在 .env.local,production 設在 hosting 的環境變數(Vercel、Render、Cloudflare 等)。

Key 是怎麼外洩的

真實案例:

**Commit 到公開 repo。**你寫死 key、commit、push 上 GitHub。Bot 幾分鐘內就會 scrape 新 commit,一小時內已經有人用你的模型跑他自己的工作流。代價:幾百到幾千美元,你還沒發現。

**送進 client-side code。**你把 OPENAI_API_KEY 放進 Next.js 的 "use client" 檔、或 React Native bundle。誰都能打開瀏覽器 DevTools 看到。這就是個人 indie dev 一個週末損失 $5,000 的方式。

**截圖貼出去。**你截了 terminal 顯示環境變數的圖,丟到 Discord 求救。這張圖現在在某人的 screenshot 資料夾、然後是下一個 AI 爬蟲的訓練資料。

Slack 跟 email DM。「這是我的 API key,你看一下為什麼跑不動?」你的 Slack 現在有它的索引。半年後 Slack workspace 被駭,key 跟著外流。

怎麼安全使用

四條規則擋掉 95% 的外洩。

**1. 永遠不要把 key 放進 source code 或 client bundle。**開發永遠 .env.local(gitignored),production 永遠平台環境變數。伺服器端才能存 — key 永遠不該到使用者的瀏覽器。

**2. .gitignore 加上 .env*。**第一次 commit 前再檢查一次。萬一不小心 commit 上去,光 rotate key 不夠 — git history 還會洩漏。用 git filter-repo 清。

**3. 用有 scope、有限額的 key。**OpenAI、Anthropic 跟大多數主流 API 都讓你建受限 key:花費上限、專案限定、唯讀。開發千萬不要用 master key — 開一個月上限 $5 的 dev key。漏了損失停在 $5。

**4. 在 dashboard 設花費警示跟上限。**OpenAI 可以設硬上限,Anthropic 同樣。在你把 key 放進 app 之前就設好,不是等帳單來才設。

Key 漏了怎麼辦

按這個順序快速行動:

  1. **馬上在 provider dashboard 撤銷 key。**每分每秒都重要。
  2. **產新 key 換掉。**更新 .env.local 跟 hosting 平台。
  3. **看用量 log。**大多 provider 會顯示近期 call,找你沒做過的高峰。
  4. **如果有費用產生,聯絡客服。**大部分主流 provider 會把明顯外洩的費用退掉,只要你動作快、故事清楚(commit hash、撤銷截圖等)。
  5. **檢討怎麼漏的。**git?Client bundle?Slack?把流程修好,下週不要再來一次。

Server vs serverless 考量

現代 web app 裡,「key 應該住哪」依 runtime 而定:

  • Server-rendered 頁面、server action、API route(Next.js / Remix / SvelteKit):key 放環境變數,server-side 用。安全。
  • Client component、client fetch(瀏覽器 JS):永遠不行。Key 會送到瀏覽器。如果瀏覽器需要跟 OpenAI 講話,透過你自家 server 代轉,加 auth。
  • Serverless function(Vercel、Cloudflare、AWS Lambda):同 server — 環境變數,絕不打包進 client code。
  • Mobile app(iOS、Android):放在 app 二進位檔的 key 用工具能挖出來。永遠透過自己的 backend 代轉。

規則:**如果使用者能看到呼叫 API 的 code,他就能挖出 key。**據此規劃。

什麼時候不用太擔心

如果你只是學習,用一個 $5 上限的測試 key 在自己筆電,最壞情況是別人花掉你一杯咖啡的錢。不要因為安全焦慮就不敢實驗。等到你 ship 給真實使用者、或用真錢的 key,那時再緊起來。

延伸閱讀

  • 什麼是 LLM
  • 什麼是 prompt injection、為什麼危險
  • 怎麼把 LLM API 帳單砍半
  • 防 prompt injection:2026 年實際的護欄
  • LLM observability:logging、tracing、evals

最後更新: 2026-04-29

We use cookies

Anonymous analytics help us improve the site. You can opt out anytime. Learn more