Bỏ qua tới nội dung

Khoá API (API key): cất sao cho an toàn, lỡ lộ thì làm gì

Giữ khoá API an toàn khi tự làm app AI: khoá hay lộ ở đâu, cất vào biến môi trường và Secrets, đặt hạn mức chi tiêu, và 4 bước xử lý khi lỡ lộ.

Hướng dẫn8 phút đọc

Bạn vừa tạo khoá API để app nhỏ của mình gọi Claude, ChatGPT hay Gemini. Từ lúc đó, chuỗi ký tự này quý như thẻ ngân hàng. Đọc xong bài, bạn sẽ biết khoá hay lộ ở đâu, cất vào chỗ nào, cài sẵn "phanh" để lỡ lộ cũng ít mất tiền, và làm gì khi lỡ lộ.

Nhắc nhanh: khoá API là gì?

Khoá API (API key) là chuỗi ký tự bí mật để dịch vụ AI biết yêu cầu nào là của bạn và tính tiền vào tài khoản của bạn. Ai cầm khoá là dùng được API bằng tiền của bạn. Chưa rõ API khác ứng dụng chat ra sao, đọc trước bài Chatbot hay API.

Mọi khoá trong bài này là khoá giả, viết dạng sk-...VIDU.

Lộ khoá thì mất gì?

  • Tiền. Người khác gọi API, hoá đơn gửi về bạn. Google ghi rõ khoá lộ có thể làm cạn hạn mức và phát sinh chi phí bất ngờ.
  • Dữ liệu, tuỳ quyền của khoá. Ví dụ với Claude, tệp tải lên qua Files API nằm trong workspace (khu làm việc) mà khoá truy cập được. Khoá càng nhiều quyền, người cầm khoá càng thấy nhiều.
  • Khoá lộ "sống" rất lâu. GitGuardian kiểm tra lại các khoá bị lộ từ năm 2022: tới tháng 1/2026, hơn 64% vẫn dùng được, tức vẫn chưa bị thu hồi.

Khoá hay bị lộ ở đâu?

  1. Đẩy lên GitHub. Báo cáo State of Secrets Sprawl 2026 của GitGuardian đếm được 28,65 triệu khoá và mật khẩu mới lộ trong commit công khai trên GitHub năm 2025; riêng khoá dịch vụ AI là 1.275.105, tăng 81%. OpenAI khuyên không đưa khoá vào kho code, kể cả kho riêng tư.
  2. Nằm trong code chạy trên trình duyệt hoặc app điện thoại. Ai mở trang cũng lục ra được.
  3. Nhóm chat, ghi chú, email. Cũng theo GitGuardian, khoảng 28% sự cố bắt nguồn hoàn toàn ngoài kho code, ở các công cụ làm việc nhóm như Slack, Jira.
  4. Ảnh chụp, video quay màn hình, nhất là lúc trang vừa tạo khoá xong và hiện khoá đầy đủ.
  5. Dán vào chatbot hoặc công cụ lạ. Anthropic lưu ý: đưa khoá cho công cụ bên thứ ba là cho người làm công cụ đó quyền dùng tài khoản của bạn. Xem thêm Quyền riêng tư khi dùng AI.

GitHub có sẵn lớp chặn: kho công khai được quét khoá miễn phí, và push protection (chặn lúc đẩy code) bật sẵn cho tài khoản cá nhân. Từ 13/10/2026, push protection chặn sẵn khoá Claude ở các kho có bật quét khoá, gồm cả kho công khai miễn phí; khoá Claude lọt vào kho công khai cũng bị Anthropic tự vô hiệu hoá và gửi email báo. Nhưng GitHub chỉ nói các lớp này giảm đáng kể rủi ro, không bắt được mọi khoá.

Cất khoá đúng chỗ

Quy tắc số 1: khoá chỉ nằm ở phía máy chủ

  • Phía trình duyệt (client): code tải về máy người xem để hiện giao diện. Ai cũng mở ra xem được.
  • Phía máy chủ (server): code chạy trên máy của dịch vụ bạn thuê, như Cloudflare Workers, Replit. Người xem chỉ nhận kết quả.

OpenAI và Google đều khuyên không bao giờ đặt khoá ở phía trình duyệt hay trong app điện thoại. Trang web gọi tới máy chủ của bạn, máy chủ cầm khoá và gọi API AI.

Khoá trong trình duyệtTrang web giữ khoáAi cũng xem đượcBị dùng trộmKhoá ở máy chủTrang web gọi máy chủMáy chủ giữ khoáGọi API AI
Khoá trong trình duyệt
Khoá nằm trong code tải về máy người xem.
Khoá ở máy chủ
Người xem chỉ nhận câu trả lời, không thấy khoá.
Khoá đặt trong trang web thì ai cũng lấy được. Khoá ở máy chủ thì người xem chỉ nhận câu trả lời.

Bẫy hay gặp khi làm app bằng AI: biến có tiền tố NEXT_PUBLIC_ (Next.js) hoặc VITE_ (Vite) bị đưa thẳng vào code phía trình duyệt. Tài liệu Vite ghi rõ không để khoá API trong các biến này.

Khi làm trên máy: biến môi trường, .env và .gitignore

  • Biến môi trường (environment variable): giá trị có tên, cấp cho chương trình lúc chạy, nằm ngoài code. Code chỉ ghi tên biến, như OPENAI_API_KEY.
  • File .env: tệp chữ chứa các biến đó để chương trình đọc khi chạy trên máy bạn.
  • File .gitignore: danh sách tệp mà Git (công cụ lưu lịch sử code) bỏ qua, không đưa lên GitHub.
.env (khoá giả, chỉ để minh hoạ)
Văn bản
OPENAI_API_KEY=sk-...VIDU
.gitignore
Văn bản
.env*
.dev.vars*

Cloudflare dặn đúng như vậy: giá trị thử trên máy để trong .dev.vars hoặc .env, và thêm cả hai vào .gitignore.

Nhưng .env không phải két sắt: nó vẫn là chữ thường trên ổ đĩa, và OWASP (tổ chức phi lợi nhuận về bảo mật web) lưu ý biến môi trường có thể lọt vào nhật ký lỗi. .env chủ yếu giúp khoá không bị đưa nhầm lên mạng.

Khi đưa app lên mạng: dùng mục Secrets

Secrets là chỗ cất giá trị bí mật trên nền tảng: được mã hoá và chỉ đưa cho code phía máy chủ lúc chạy. Kiểm tra ngày 17/10/2026:

Nền tảngCách thêmLưu ý
Cloudflare WorkersLệnh npx wrangler secret put <TÊN>, hoặc Worker → Settings → Variables and Secrets, chọn loại SecretKhông để khoá trong vars của file cấu hình
ReplitTools → SecretsNgười cộng tác xem được giá trị
GitHub ActionsSecrets của khoGitHub tự che khoá trong nhật ký, nhưng không bảo đảm mọi trường hợp

Ví dụ với Cloudflare, gõ trong CMD tại thư mục dự án, rồi dán khoá khi được hỏi:

CMD
npx wrangler secret put OPENAI_API_KEY

Cài sẵn "phanh" để lỡ lộ cũng ít thiệt hại

Mỗi app một khoá, đặt tên dễ nhận như web-dat-banh. Anthropic khuyên vậy: lộ một khoá thì chỉ tắt khoá đó, app khác vẫn chạy.

Thu hẹp quyền. Quyền hạn (scope) là những việc khoá được phép làm. Chỉ cấp đúng việc cần:

  • OpenAI: khi tạo khoá, chọn All (toàn quyền, mặc định), Restricted (chọn từng quyền) hoặc Read Only (chỉ đọc).
  • Google: thêm API restrictions (chỉ gọi được Gemini API) và giới hạn nơi gọi: trang web, địa chỉ IP, app Android, app iOS.
  • Claude Console: khoá có thể gắn với một workspace, chỉ truy cập tài nguyên trong đó.

Xoay vòng khoá (rotate): thay khoá mới theo lịch rồi tắt khoá cũ. OpenAI khuyên tạo khoá có ngày hết hạn; Anthropic gợi ý thay khoảng 90 ngày một lần.

Đặt hạn mức chi tiêu

Phân biệt cảnh báo (chỉ gửi email, API vẫn chạy) với giới hạn cứng (vượt là API ngừng trả lời). Kiểm tra ngày 17/10/2026:

HãngỞ đâuChặn hay chỉ báo
OpenAIProject settings → Limits → SpendChặn khi bật Enforce a hard limit, không bật thì chỉ báo
AnthropicClaude Console → Workspaces → chọn workspace → Spend limitsGiới hạn tháng kèm cảnh báo. Không đặt được cho Default Workspace, nên tạo workspace riêng cho app
Google (Gemini API)Google AI Studio → Spend → Monthly spend capĐang thử nghiệm. Budget alerts của Google Cloud chỉ báo, không chặn

Ước lượng nên đặt bao nhiêu: xem cách tính tiền theo token ở bài Cách đọc bảng giá công cụ AI.

Lỡ lộ khoá: làm ngay 4 bước

  1. Thu hồiXoá hoặc tắt khoá cũ ngay
  2. Tạo mớiTạo khoá mới, cất vào Secrets
  3. Cập nhậtThay khoá ở mọi nơi đang dùng
  4. Kiểm hoá đơnXem lịch sử dùng và chi phí
Thu hồi trước, dọn dẹp sau: khoá đã tắt thì người khác cầm cũng vô dụng.
  • Thu hồi với Claude: Claude Console → API keys → menu ba chấm cạnh khoá → Delete API Key. Với OpenAI: trang API Keys.
  • Kiểm hoá đơn: còn thấy lượt gọi lạ thì liên hệ hỗ trợ của hãng.
  • App đang có người dùng thật: Google gợi ý tạo khoá mới, thay vào app, chạy ổn rồi tắt khoá cũ, để app không gián đoạn. App nhỏ đang thử thì cứ thu hồi trước: dừng vài phút còn rẻ hơn mất tiền.

Nhờ AI viết code mà không lộ khoá

Bài Vibe coding là gì? đã nhắc cất khoá trong Secrets. Khi làm thật:

  • Không dán khoá thật vào khung chat. AI chỉ cần biết tên biến. Lỡ dán rồi thì an toàn nhất là coi như đã lộ và thay khoá.
  • Nhờ AI dùng biến môi trường và rà lại bằng prompt dưới đây. AI có thể bỏ sót, nên vẫn giữ các lớp chặn của GitHub.
Prompt mẫu: nhờ AI rà khoá bí mật
Văn bản
Dự án này gọi API AI bằng khoá bí mật. Hãy:
1. Không viết khoá thật vào code.
   Đọc khoá từ biến môi trường tên OPENAI_API_KEY.
2. Chỉ gọi API AI từ phía máy chủ.
   Trang web gọi tới máy chủ của tôi, không gọi thẳng API AI.
3. Rà toàn bộ dự án: có khoá, mật khẩu hay token nào nằm
   trong code, file cấu hình, hoặc biến có tiền tố
   NEXT_PUBLIC_ hay VITE_ không?
   Liệt kê vị trí trước, chưa sửa vội.
4. Kiểm tra .gitignore đã có .env và .dev.vars chưa.
Tôi không biết lập trình, hãy giải thích bằng lời dễ hiểu.

Checklist trước khi đưa app lên mạng

  • Khoá chỉ ở phía máy chủ hoặc trong Secrets, không có trong code giao diện.
  • .env, .dev.vars có trong .gitignore; mở kho trên GitHub không thấy các file này.
  • Mỗi app một khoá, chỉ có quyền cần thiết.
  • Đã đặt hạn mức chi tiêu, biết đó là giới hạn cứng hay chỉ cảnh báo.
  • Ảnh chụp, video đã che khoá; biết trang nào để thu hồi khoá.

Nguồn tham khảo

Kiểm tra ngày 17/10/2026.

Viết bởi Thế cho AI247. Thấy hữu ích? Hãy chia sẻ cho người cần.

FacebookX