我們大多數人都已經養成「不要提交祕密」的反射動作了。pre-commit hooks、CI 裡的祕密掃描器、把 .env 放進 .gitignore。很好,這些都能涵蓋儲存庫。
但這還涵蓋不到上下文視窗。
當你使用 AI 程式開發助理時,離開你電腦的,不只是你正在編輯的檔案。還包括你貼上的內容、擴充套件判定為相關的內容,以及代理在「協助」你時讀取的所有資料。現在的安全邊界,還包含編輯器擴充套件、聊天紀錄、任何遙測資料,以及所有在把這些上下文送到模型、再送回來的過程中所經過的服務。
祕密掃描器會監看提交內容。典型設定裡,沒有任何東西會監看你在晚上 6 點、部署失敗時貼到聊天面板裡的內容。
以下是幾種祕密在不碰到 git 的情況下,卻仍然進入上下文的常見方式。
整合測試失敗了。斷言訊息很貼心地把客戶端物件整個傾印出來,其中包含了內嵌密碼的連線字串。你把整段測試輸出複製到助理裡,然後問:「為什麼這裡會失敗?」
問題本來是關於斷言。載荷卻包含了憑證。
$ env | sort
...
AWS_SECRET_ACCESS_KEY=...
DATABASE_URL=postgres://app:[email protected]:5432/prod
STRIPE_SECRET_KEY=sk_live_...
「這是我的環境,為什麼應用程式找不到設定?」這是很正常的除錯動作。只是這也等於一次貼上就把機器上的每把鑰匙全交出去。若你允許能執行 shell 指令的代理做這件事,它甚至可以自己完成。
詳細模式的 HTTP 用戶端會記錄請求標頭。其中一個是 Authorization: Bearer ...。你貼了 200 行日誌來處理逾時問題,而第 143 行就是真實權杖。
有人在 Slack 分享了一段「可正常運作的範例」,但裡面的金鑰還在。你把它貼進助理裡想要改寫。現在它同時存在於你無法控制的兩套系統中,而不是一套。
(這些都是示意情境,不是特定事件;但如果你曾在壓力下除錯,大概至少見過其中一種。)
.env、憑證檔和祕密儲存區遠離它的可讀範圍。刪掉聊天訊息不算補救。你不知道在你按下刪除之前,有哪些內容被記錄、快取或轉送了。要把它當成一般外洩事件處理:輪替該憑證、撤銷舊的那一把,並檢查存取紀錄有沒有被使用。
祕密管理以前是版本控制的問題。當 AI 工具介入之後,它變成了資料流的問題:任何進入模型上下文的內容,在某種程度上,都已經離開你的控制範圍。
最安全的祕密,就是根本不要先進入上下文。
你們團隊現在怎麼處理這件事?你們有任何工具會檢查送進 AI 助理的內容嗎,還是完全靠開發者的習慣?
原文出處:https://dev.to/cyclopt_dimitrisk/your-secrets-dont-need-a-git-commit-to-leak-into-an-ai-tool-be2