學習中心/資料安全·9 分鐘

AI 幫我寫的程式,會不會把 API 金鑰外洩出去?

// 一句話回答

會。AI 為了讓程式「能跑」,很常把 API 金鑰、密碼直接寫死在程式碼裡。你一 push 上公開空間(例如 GitHub 的 public repo),會有機器人在幾分鐘內掃到、拿去盜刷。防範四招:金鑰改放環境變數(.env)、把 .env 加進 .gitignore、上線前用免費工具掃一遍、萬一外洩立刻到服務後台換掉那把 key。刪掉 commit 沒用,因為 git 歷史還留著。

先搞懂:API 金鑰、token、密碼是什麼

在講風險前,先把幾個名詞用白話講清楚,後面才看得懂。

API 金鑰(API key):一串用來證明「這是我」的密碼字串,通常長得像 sk-a1b2c3... 這樣。你的程式要去用某個服務(例如 AI、金流、簡訊、地圖),就得帶著這串金鑰,服務才知道是你、才會記到你的帳上。所以它等於你家的鑰匙,誰拿到誰就能用你的帳號、花你的錢。

token(權杖):跟金鑰類似,也是一串「證明身分」的字串,常見於登入授權(例如串接 FB、Google)。你可以把 key 和 token 都當成「不能給別人看的通行證」。

連線字串(connection string):一段包含「主機位置+帳號+密碼」的文字,程式靠它連上資料庫。裡面有密碼,所以一樣是機密。

這篇講的「機密」,指的就是上面這些:金鑰、token、密碼、連線字串。它們的共同點是——一旦被別人看到,別人就能假冒你。

為什麼「放錯地方」會出大事

先解釋一個名詞:repo(repository,程式碼倉庫) 是放你整個專案程式碼的地方,最常見的平台是 GitHub。repo 可以設成 private(私有,只有你看得到)public(公開,全世界都看得到)

問題來了:GitHub 這種公開平台上,有一大堆機器人 24 小時不停地掃描新上傳的程式碼,專門找金鑰、token、密碼。這不是理論,是每天都在發生的事。你的金鑰只要出現在一個 public repo,往往幾分鐘內就會被撿走。

被撿走之後會發生什麼?看那把金鑰是什麼服務的:AI 服務的金鑰被拿去狂打、帳單一夜爆表;資料庫的連線字串被拿去把你客戶資料整包下載;金流的金鑰被拿去做未授權的交易。對一間公司來說,這賠上的是真金白銀和客戶信任。

最大的誤會:「我把那行刪掉就好了」

很多人金鑰不小心上傳後,反應是「把那行程式刪掉、重新上傳一次」,以為就沒事了。這是不夠的。

原因跟 git(版本控制工具,記錄程式碼每一次修改的系統) 的運作有關:git 會把你每一次的修改都存成歷史紀錄,方便你日後回溯。所以就算你這一版把金鑰刪了,它還躺在「上一版的歷史」裡,任何人都能翻出來。

打個比方:這就像你在一本有自動存檔、記錄每一次塗改的筆記本上寫了密碼,然後只是用立可白把最新那頁塗掉——前面每一頁的存檔還在,翻回去就看得到。

所以金鑰一旦外洩,唯一有效的做法是「換掉那把金鑰」(後面會講),刪 commit 只是次要清理。

另一個常見誤會:這跟「資料能不能餵 AI」是兩回事

很多人一聽「AI 資訊安全」,想到的是「公司資料能不能貼給 AI」。這是另一個題目:在對話框貼資料給 AI 分析,風險相對可控,真的要餵敏感資料,先做去識別化就好(見『客戶個資能不能給 AI』)。

這篇講的是完全不同、而且更容易出大事的一件事:金鑰、密碼、公司機密被放到「公開空間」。這兩件事別搞混——前者是「要不要給 AI 看」,後者是「有沒有把鑰匙掛在門外」。

具體看一次:AI 寫的程式為什麼會外洩金鑰

你請 AI 幫你寫一段「呼叫某服務」的程式,AI 為了讓它「馬上能跑」,最直覺的寫法就是把金鑰直接填進去。像這樣:

  • 寫死(hardcode):程式碼裡直接出現 api_key = "sk-a1b2c3真正的金鑰"。金鑰本人就攤在程式裡,一起被上傳。
  • 改讀環境變數:程式碼裡只寫 api_key = 讀取環境變數("API_KEY"),金鑰本身存在程式外面的設定檔,程式碼裡看不到它。

四個原則,把金鑰管好

下面四招,涵蓋「平常怎麼放」到「出事怎麼辦」。不會寫程式也看得懂原理,實作時可以把這幾條丟給 AI 請它幫你改。

  • 一、金鑰別寫死,改用環境變數環境變數(environment variable)白話說,就是把金鑰存在程式外面的一個地方,程式執行時才去那裡拿。程式碼裡只寫「去拿 API_KEY」,不寫金鑰本身。這樣就算程式碼被公開,也看不到金鑰。
  • 二、把 .env 加進 .gitignore.env 是最常用來放這些機密的設定檔(一行一個,像 API_KEY=sk-...)。.gitignore 則是一份「這些檔案不要上傳」的清單。你要把 .env 寫進 .gitignore,git 才會跳過它、不上傳。沒加,就等於把 .env 一起公開了——這是最常見的一種外洩。
  • 三、上線前用免費工具掃一遍:這類工具會自動幫你揪出漏掉的金鑰,上線前掃一次很值得。常見的有 gitleaksgit-secretstruffleHog(三個都是免費的掃描工具,能掃你整個 repo 和歷史紀錄),以及 GitHub 內建的 Secret Scanning(把 repo 設定裡打開,GitHub 會自動幫你偵測並警告)。
  • 四、萬一外洩,立刻換掉那把 key(rotate):到那個服務的後台,重新產生一把新金鑰、把舊的作廢,這動作業界叫 rotate(輪替)。這是外洩後唯一真正有效的止血,別只顧著刪 commit。

萬一真的外洩了:正確的補救順序

如果你發現金鑰已經上傳到公開空間,照這個順序做,先止血再清理:

  • 第 1 步(最急):作廢舊金鑰、產生新的。到服務後台把外洩那把 key 立刻停用(revoke/delete),再產一把新的填回你的 .env。這一步做完,就算舊金鑰被撿走也已經失效。
  • 第 2 步:檢查有沒有被盜用。看那個服務的用量/帳單/登入紀錄,確認外洩期間有沒有異常呼叫。有的話,聯絡服務商並保留紀錄。
  • 第 3 步:把金鑰從 git 歷史清掉。用工具(例如 git filter-repo 或 BFG Repo-Cleaner)把歷史裡的金鑰移除。這步是清理,重要性次於前兩步(因為金鑰已經作廢了)。
  • 第 4 步:檢討怎麼流出去的。是 .env 沒進 .gitignore ?還是直接寫死在程式裡?把根本原因補起來,才不會下次又來一遍。

用「AI 幫你寫 code」的工具,要更小心

現在很多人用 Cursor、v0、Replit、Lovable 這類「你講需求、AI 直接生出可跑程式」的工具,甚至一鍵幫你部署上線。方便,但風險也更高:因為你可能根本沒讀那段程式,不知道金鑰被寫在哪、也不知道它被推到哪個 repo。

所以用這類工具時,養成兩個習慣:一是上線/公開前,先用下面的自檢提示詞讓 AI 幫你掃一遍;二是留意它有沒有幫你建 public repo,需要的話改成 private。你不熟程式沒關係,讓 AI 當你的檢查員就好。

一鍵複製:機密自檢提示詞

把下面這段貼給 AI(Claude、ChatGPT 都行),再把你的程式碼或檔案清單貼上去,它會幫你把可能外洩的地方列出來。上公開空間前先跑一次:

機密自檢提示詞・一鍵複製

【機密自檢】 我要你當資安檢查員,掃我接下來貼給你的程式碼/檔案清單,找出不該公開卻可能被公開的東西: 1. 寫死的 API 金鑰、access token、密碼、私鑰、連線字串 2. 被 commit 進版控的 .env、憑證檔、金鑰檔(該進 .gitignore 卻沒進的) 3. 公司內部資訊:客戶名單、內部網址、資料庫連線、財務數字 每一個列成清單,標【風險:高/中/低】+【建議:移到環境變數/加進 .gitignore/立刻輪替】 沒把握的也標出來讓我自己確認,不要漏

對中小企業與創業者的實際意義

對老闆和一人公司來說,這件事的重點不是「學會多少資安術語」,而是建立一個習慣:任何東西要放到公開的地方之前,先想一秒「這裡面有沒有鑰匙」

金鑰外洩最貴的,從來不是修復本身,是被盜刷的帳單、被外洩的客戶資料,以及隨之而來的信任損失。而防範它其實不難——把金鑰放對地方、上線前掃一遍,就擋掉九成的意外。AI 幫你寫程式很快,但它不會替你顧機密,這一關得你自己把。

常見問題

我的 repo 是私有(private)的,是不是就沒事?

風險小很多,但仍建議照四個原則做。因為專案有時會不小心被設成公開、或交接給別人、或未來決定開源;金鑰一開始就放對地方(環境變數+.gitignore),之後這些情況都不用擔心。習慣養好,比事後補救省事。

金鑰已經 push 上去了,把那個 commit 刪掉就好了嗎?

不夠。git 會保留每一次修改歷史,金鑰還躺在舊版裡翻得出來。正確做法是「立刻到服務後台換一把新 key、把舊的作廢」,這才是真正止血;清 git 歷史只是次要的清理動作。

我完全不會寫程式,用 AI 產生的程式也要注意這個嗎?

要,而且更要。正因為你不熟程式,AI 把金鑰寫死你也不會發現,一貼上公開空間就外洩。最省事的做法是用文中的「機密自檢提示詞」,讓 AI 在你上線前先幫你檢查一遍。

環境變數(.env)到底要放哪?部署到線上時怎麼辦?

本機開發時放在專案裡的 .env 檔(並確保它在 .gitignore 裡、不會上傳)。部署到線上服務(例如 Vercel、Cloudflare、雲主機)時,這些平台都有「環境變數設定」的地方,把金鑰填進去即可,一樣不會出現在程式碼裡。

怎麼知道我的金鑰是不是已經外洩了?

幾個訊號:GitHub 若開了 Secret Scanning,偵測到會寄警告信給你;服務商(例如 OpenAI)有時也會主動通知並自動停用外洩金鑰;平常也可留意帳單/用量有沒有異常暴增。只要懷疑外洩,最保險就是直接換一把新的。

那 API 金鑰可以貼給 AI(Claude/ChatGPT)幫我看嗎?

檢查程式碼時,建議把金鑰用假字串代替(例如把 sk-真正的金鑰 換成 sk-xxxx)再貼,或用文中的自檢提示詞讓它「找出金鑰」而不需要你貼真金鑰。原則一樣:真正的金鑰,能不外流就不外流。

延伸閱讀

想讓整個團隊真的會用 AI?

我把自己經營公司在用的 AI 實戰,做成企業內訓 —— 帶團隊用真實任務當場做出成果。

看企業 AI 內訓