我們大多數人都已經養成「不要提交祕密」的反射動作了。pre-commit hooks、CI 裡的祕密掃描器、把 .env 放進 .gitignore。很好,這些都能涵蓋儲存庫。

但這還涵蓋不到上下文視窗。

這個落差:儲存庫不再是邊界

當你使用 AI 程式開發助理時,離開你電腦的,不只是你正在編輯的檔案。還包括你貼上的內容、擴充套件判定為相關的內容,以及代理在「協助」你時讀取的所有資料。現在的安全邊界,還包含編輯器擴充套件、聊天紀錄、任何遙測資料,以及所有在把這些上下文送到模型、再送回來的過程中所經過的服務。

祕密掃描器會監看提交內容。典型設定裡,沒有任何東西會監看你在晚上 6 點、部署失敗時貼到聊天面板裡的內容。

以下是幾種祕密在不碰到 git 的情況下,卻仍然進入上下文的常見方式。

1. 失敗的測試把設定印了出來

整合測試失敗了。斷言訊息很貼心地把客戶端物件整個傾印出來,其中包含了內嵌密碼的連線字串。你把整段測試輸出複製到助理裡,然後問:「為什麼這裡會失敗?」

問題本來是關於斷言。載荷卻包含了憑證。

2. 環境變數傾印

$ env | sort
...
AWS_SECRET_ACCESS_KEY=...
DATABASE_URL=postgres://app:[email protected]:5432/prod
STRIPE_SECRET_KEY=sk_live_...

「這是我的環境,為什麼應用程式找不到設定?」這是很正常的除錯動作。只是這也等於一次貼上就把機器上的每把鑰匙全交出去。若你允許能執行 shell 指令的代理做這件事,它甚至可以自己完成。

3. 記錄太多的日誌

詳細模式的 HTTP 用戶端會記錄請求標頭。其中一個是 Authorization: Bearer ...。你貼了 200 行日誌來處理逾時問題,而第 143 行就是真實權杖。

4. 被複製的程式片段

有人在 Slack 分享了一段「可正常運作的範例」,但裡面的金鑰還在。你把它貼進助理裡想要改寫。現在它同時存在於你無法控制的兩套系統中,而不是一套。

(這些都是示意情境,不是特定事件;但如果你曾在壓力下除錯,大概至少見過其中一種。)

什麼真正有幫助

  • 盡量少送。 貼相關的十行就好,不要整份日誌。問錯誤本身,不要問整個環境。
  • 貼上前先遮蔽。 把權杖、連線字串和標頭遮住。準備一個簡單的 shell 函式或編輯器片段,用來清理明顯的模式,會很值得。
  • 限制憑證的權限範圍。 就算開發用金鑰真的外洩了,也應該只能碰開發環境。短效期、最小權限的金鑰可以縮小影響範圍。
  • 確認工具怎麼處理資料。 會保留什麼、保留多久、是否用來訓練模型、擴充套件會自動送出哪些內容、遙測資料會去哪裡。這些通常是不同的設定、不同的政策。一個「隱私」切換鈕通常無法一次回答所有問題。
  • 限制代理可讀取的內容。 如果你的助理可以開檔案、執行指令,就讓 .env、憑證檔和祕密儲存區遠離它的可讀範圍。

如果事情已經發生了

刪掉聊天訊息不算補救。你不知道在你按下刪除之前,有哪些內容被記錄、快取或轉送了。要把它當成一般外洩事件處理:輪替該憑證、撤銷舊的那一把,並檢查存取紀錄有沒有被使用。

重新理解這件事

祕密管理以前是版本控制的問題。當 AI 工具介入之後,它變成了資料流的問題:任何進入模型上下文的內容,在某種程度上,都已經離開你的控制範圍。

最安全的祕密,就是根本不要先進入上下文。

你們團隊現在怎麼處理這件事?你們有任何工具會檢查送進 AI 助理的內容嗎,還是完全靠開發者的習慣?


原文出處:https://dev.to/cyclopt_dimitrisk/your-secrets-dont-need-a-git-commit-to-leak-into-an-ai-tool-be2


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

共有 0 則留言


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