API 金鑰外洩的 7 條路徑(左),以及各自應先做的事(右)以箭頭連結的圖。從伺服器與公開存放處來看有 3 個:①公開儲存庫(最多。2025 年一年內有 2,865 萬件)→ 先撤銷外洩的金鑰,並使用推送保護與密鑰掃描;②網站的公開資料夾 → 不要把 .env 或 .git 放在公開資料夾;③分發的套件/容器映像檔 → 在分發前,確認連中間層都沒有金鑰。從 AI 來看有 3 個:④日誌與 AI 對話紀錄 → 不要讓金鑰輸出,不要讓 AI 顯示 .env;⑤AI 工具與 MCP 設定檔 → 不要公開設定檔,使用權限受限的金鑰;⑥AI 訓練所用的公開資料 → 先撤銷外洩的金鑰。從使用者畫面(瀏覽器)來看有 1 個:⑦原本可以公開的金鑰權限變更 → 先把可用 API 與可用網站範圍縮小

一聽到「API 金鑰外洩」,很容易聯想到是被惡意人士偷走。實際上更常見的是:放置金鑰的位置,比想像中更容易被看見。

本文根據公開報告與案例,以及我們網站實際收到的存取紀錄,把 API 金鑰外洩的路徑分成 7 類,並回答各自應該先堵住什麼。開頭的圖把 7 條路徑按外洩位置列在左邊,右邊則列出各自應先做的事。引用的原文與細節數字,逐行整理在調查頁面 API 金鑰是從哪裡外洩的 — 7 條路徑。


1. 先統一用詞

詞語意思金鑰系統用來確認「是否允許使用」的秘密字串。包括密碼、API 金鑰、存取權杖等。本文把這些統稱為「金鑰」API 金鑰金鑰的一種。程式呼叫另一個系統的 API 時,用來表明自己身分的字串。持有 API 金鑰的人可以做出與擁有者相同的操作環境變數程式執行時,從外部傳入的設定值。常用來放 API 金鑰.env用來記錄環境變數值的檔案。常會放 API 金鑰與密碼。.git存放程式碼變更記錄的資料夾,也包含過去的紀錄。容器映像檔把執行應用程式所需的元件整合成一個套件後分發的形式MCP讓 AI 連接外部服務與工具的規則密鑰掃描GitHub 等服務會從放置的程式碼中搜尋像金鑰的字串,並通知找到的金鑰的機制2. 漏失的歧路有 7 種

將 API 金鑰外洩的 7 條路徑按外洩位置分成 3 類並附上圖示的圖。從伺服器與公開存放處來看有 3 個(①公開儲存庫、②網站的公開資料夾、③分發的套件或容器映像檔),從 AI 來看有 3 個(④日誌與 AI 對話紀錄、⑤AI 工具與 MCP 設定檔、⑥AI 訓練所用的公開資料),從使用者畫面(瀏覽器)來看有 1 個(⑦原本可以公開的金鑰權限變更)

按外洩位置來分,可分為伺服器與公開存放處 3 種、AI 3 種,以及使用者畫面(瀏覽器)1 種。這些情況本質上都一樣:放置金鑰的位置,比想像中更容易被看見。

📎 7 條路徑的出處見 API 金鑰是從哪裡外洩的 的「漏失的歧路有 7 種」。

3. 最常見的是公開儲存庫

數量最多的是,把金鑰寫在公開到 GitHub 等平台的程式碼裡,卻忘了移除的外洩方式。根據 GitGuardian 的年度報告,2025 年一年內新放到公開 GitHub 的金鑰有 2,865 萬件。

在日本的案例中,豐田汽車委託廠商公開的原始碼中含有資料伺服器的存取金鑰,導致約 5 年都處於第三者可檢視的狀態。這類事件通常是把設定檔直接公開、或在範例中誤把真實金鑰一併分享所致。

📎 原文見 API 金鑰是從哪裡外洩的 的「公開儲存庫」。漏出的金鑰由誰來攔截,整理在 什麼是密鑰掃描。

4. Web 網站的 .env,只要擊中名稱就會被讀取

比較公開資料夾中的 .env 被讀取的機制圖。搜尋方會依序要求像「/.env」「/ci/.env」這類看起來可能存在的名稱與路徑。沒有把 .env 放在公開資料夾的網站會回覆「找不到」,因此不會外洩任何內容(IT 連結地圖的網站,回傳內容的請求為 0 件)。若誤放了 .env,檔案內容會直接回傳,裡面的 API 金鑰與密碼也會被帶走

如果把寫有環境變數的 .env 放到網站的公開資料夾(任何人都能讀取的地方),只要名稱被猜到,內容就會被回傳。搜尋方會依序嘗試看起來可能存在的名稱與路徑。

實際上,在我們網站 22 天的紀錄中,收到的攻擊型請求有 8,219 件,其中尋找 .env 的請求至少有 1,566 件,尋找 .git 的請求至少有 108 件。我們的網站沒有放 .env,所以回傳內容的請求是 0 件。

📎 被搜尋的位置前 10 名與統計方式見 API 金鑰是從哪裡外洩的 的「調查細節」。.env 應該放在哪裡,可參考 .env 改個名字就安全嗎 — 合鍵的放置位置。

5. AI 的對話、設定與學習資料也會留下紀錄

公開 GitHub 上 MCP 設定檔中找到的 2 萬 4,008 件金鑰圓餅圖。仍可使用的金鑰有 2,117 件(8.8%),無法確認是否仍可使用的金鑰有 21,891 件(91.2%)(GitGuardian)

開始使用 AI 之後,金鑰的放置位置也變多了。從把 AI 工具連接到外部服務的 MCP 設定檔中,在公開 GitHub 找到了 2 萬 4,008 件金鑰,其中 2,117 件仍然可用。

也有研究指出,AI 代理元件的弱點中,有 73.5% 是因為為了驗證行為而產生的輸出流進了 AI 對話所造成的。對話紀錄會留在手邊。此外,從 AI 訓練所用的公開儲存庫中,也找到了 54 萬 3,699 件仍可用的金鑰。一旦資料被彙整,即使原始儲存庫刪除,金鑰也不會跟著消失。

📎 原文見 API 金鑰是從哪裡外洩的 的「AI 的設定與學習資料」。將金鑰交給 AI 代理時的注意事項,整理在 把金鑰交給 AI 代理可以嗎;在新增 MCP 伺服器前應確認的事項,整理在 新增 MCP 伺服器之前,該確認什麼。

6. 已公開的金鑰卻因權限變化而變成風險

已公開的金鑰因權限變化而變成風險的前後比較圖。金鑰字串不變,但可使用的 API 增加,結果從可公開的金鑰變成不該外洩的金鑰。前:放在網頁上的地圖顯示用金鑰。可用 API 只有地圖顯示,Gemini 無效。即使被撿走,也只能用來顯示地圖。變化:同一個專案中,另一位負責人啟用了 Gemini API(不會通知金鑰持有人)。後:同一把金鑰同時可用於地圖顯示與 Gemini。從頁面上撿到金鑰的人,就能查看上傳的檔案或儲存的資料,甚至讓 AI 的費用算到持有人頭上。先做的事:把可用 API(只限地圖顯示)與可用網站範圍設定到金鑰上。Truffle Security 找到了 2,863 件這類 Google 金鑰

在網頁上顯示 Google 地圖時,會把 Google 金鑰寫進頁面的 HTML 並公開。這把金鑰原本是預期會被看見的。然而,若同一專案中另一位負責人啟用生成式 AI 的 Gemini API,原本公開的同一把金鑰也會變得可用於 Gemini。金鑰字串不會改變,金鑰持有人也不會收到通知。

Truffle Security 找到了 2,863 件這樣的 Google 金鑰。從頁面上撿到金鑰的人,就能用那把金鑰查看上傳的檔案、或讓 AI 的費用算到持有人名下。

即使是可以公開的金鑰,如果沒有事先把可用的 API 與可用網站範圍縮小,也可能在之後變成不該外洩的金鑰。

📎 原文見 API 金鑰是從哪裡外洩的 的「已公開的金鑰卻因權限變更而變成風險」。

7. 依照歧路先封住的地方

將 API 金鑰外洩的 7 條路徑各自的外洩方式與應先做的事並列的圖。①公開儲存庫:把金鑰寫在程式碼或設定檔中就公開,或把真實金鑰放進範例中分享 → 先撤銷外洩的金鑰,並使用推送保護與密鑰掃描。②網站的公開資料夾:把 .env 或 .git 放在任何人都能讀取的地方,讓人透過猜名稱讀到內容 → 不要把 .env 或 .git 放在公開資料夾。③分發的套件/容器映像檔:公開的 Docker 映像檔中,從中間層把金鑰抽出來(Codecov)→ 在分發前,連中間層也一起確認沒有金鑰。④日誌與 AI 對話紀錄:為了驗證行為而產生的輸出流入 AI 對話,並留在本機記錄中 → 不要讓金鑰輸出,不要讓 AI 顯示 .env 內容。⑤AI 的設定與 MCP 設定檔:把金鑰直接寫在設定檔中,連同檔案一起公開 → 不要公開設定檔,使用權限受限的金鑰。⑥AI 訓練所用的公開資料:金鑰一旦被收集到資料中,即使原始儲存庫刪除也不會消失 → 先撤銷外洩的金鑰。⑦已公開的金鑰卻因權限變更而變成風險:同一專案中啟用另一個 API,讓原本公開的金鑰也能用於生成式 AI → 先把可用 API 與可用網站範圍縮小。金鑰一旦外洩,不論哪條路徑,第一件事都是先撤銷外洩的金鑰。即使把金鑰從程式碼或檔案中刪掉,金鑰本身仍然可用

路徑先做的事公開儲存庫撤銷外洩的金鑰,並使用推送保護與密鑰掃描(什麼是密鑰掃描)網站的公開資料夾不要把 .env 或 .git 放在公開資料夾套件與容器映像檔在分發前,連中間層也一起確認沒有金鑰日誌與 AI 對話不要讓金鑰輸出。不要讓 AI 顯示 .env 內容AI 的設定與 MCP不要公開設定檔。使用權限受限的金鑰訓練資料撤銷外洩的金鑰已公開的金鑰卻因權限變更而變成風險先把可用 API 與可用網站範圍縮小一旦確定金鑰外洩,不論是哪條路徑,第一步都是先撤銷外洩的金鑰。因為即使從程式碼或檔案中刪除,金鑰本身仍然可以使用。關於金鑰的期限與撤銷方式,整理在 API 權杖何時到期、如何撤銷。

一次出處

出處內容GitGuardian: The State of Secrets Sprawl 2026公開 GitHub 的金鑰 2,865 萬件・MCP 設定檔豐田汽車:關於客戶電子郵件地址等可能外洩之致歉公開的原始碼中含有存取金鑰Codecov: April 2021 Post-Mortem從容器映像檔的中間層抽出金鑰Chen et al.(arXiv 2604.03070)AI 代理元件弱點的 73.5%Truffle Security: Why exposed credentials stay live for years訓練所用公開儲存庫中的金鑰Truffle Security: Google API keys and Gemini可用於 Gemini 的 Google 金鑰 2,863 件引用的原文與出處,全部都在調查頁面逐行公開。若想確認細節,請參閱 API 金鑰是從哪裡外洩的 — 7 條路徑。

讀者問卷進行中
如果你希望這個主題被更深入探討,請在文章按「讚」。我們會依照「讚」數高的主題順序持續追加調查,結果將在新文章中公告(追蹤後會收到通知)。

【可轉載】關於本文轉載

本文的文字與圖表皆可轉載。圖請不要加工直接使用。轉載時請註明出處,並連回本文完整版本 《API 金鑰是從哪裡外洩的》(renkeimap.jp)。不需要事前聯絡。

※ 作者曾任職於日立系 IT 廠商、照護軟體供應商、大學醫院 IT 部門,後來獨立;目前一邊支援中小企業的 IT/DX,一邊以第一手資料研究業務系統的「串接關係」。文中的「編輯部」是指作者所屬的 IT 連結地圖編輯部。若發現錯誤,請到 更正窗口(免費、無需帳號)提出。更正紀錄也會公開。


原文出處:https://qiita.com/songchong/items/02672765fe53f911a1a0


精選技術文章翻譯,幫助開發者持續吸收新知。

共有 0 則留言


精選技術文章翻譯,幫助開發者持續吸收新知。
🏆 本月排行榜
🥇
站長阿川
📝54   💬2  
717
🥈
NewsData
2
評分標準:發文×10 + 留言×3 + 獲讚×5 + 點讚×1 + 瀏覽數÷10
本數據每小時更新一次
📢 贊助商廣告 · 我要刊登