Skip to content
Dustin's AI Lab
Go back

金鑰漏在你以為安全的地方

一週內三次金鑰差點外洩,入口都不是貼錯:skill 打包、遮蔽指令失手、build 設定。最後附上我判斷要不要輪換的準則。

目錄
  1. 入口一:打包
  2. 入口二:遮蔽指令本身
  3. 入口三:build 設定
  4. 輪換還是只提醒

這週我碰到三次金鑰外洩的狀況。三次都不是「不小心貼到公開的地方」這種老梗,而是從我自以為安全的環節漏出去:打包、遮蔽指令、build 設定。這篇只講機制,不貼任何值。

入口一:打包

我的 harness 裡有一個 skill,另外做了一份給網頁上傳用的版本。這份網頁上傳版把 TikHub 和 Apify 的金鑰內嵌進去了,而且已經經過兩次 commit 推上私有 remote。

我原本以為有備份的金鑰掃描擋著,結果掃描規則抓不到 apify_api_ 這個前綴。也就是說,掃描一路綠燈,不代表裡面沒有金鑰,只代表它認得的格式裡沒有。這條規則我已經補上了。

私有 remote 不等於沒有外洩,推上去就是推上去了。

入口二:遮蔽指令本身

處理上面那件事的時候,遮蔽用的是 sed,但 macOS 的 BSD sed 不支援 \s。

於是遮蔽的 pattern 沒有比對到,替換沒有發生,完整的值就直接印進對話了。工具沒有報錯,輸出看起來也很正常,只是該被遮掉的東西沒被遮掉。

入口三:build 設定

第三個是我自己產品的前端專案。vite.config.ts 裡有一段 define,會把本機 .env 的 GEMINI_API_KEY 直接燒進前端 bundle。

CI 上沒有這個環境變數,所以 CI 打出來的線上版本是乾淨的。只有在本機 build、再從本機部署的時候,key 才會跟著 bundle 一起出去。

我已經開了待辦去修設定,在修好之前的規則是:手動部署一律先把那個變數清空。

兩天後查證:那把 key 早就失效,過去六週沒有實質用量,現在的 bundle 也不再帶 key。

輪換還是只提醒

三件事處理完,我回頭看自己判斷要不要輪換金鑰的準則。我的做法是先查再決定,不憑感覺:


15 分鐘導入診斷

填表預約你的專屬 1 對 1 免費診斷時段,了解你可以怎麼無痛與 AI 協作、大幅提升生產力。

預約免費診斷
Share this post on:
Previous Post
14 天 159 次確認,七成是誤判
Next Post
某市政府 AI 推動評議:我給的四個建議