Windows 開發的安全性與負責任 AI

AI 工具能大幅加速 Windows 應用程式的開發,但速度並不會減輕責任。 你的 AI 代理產生的程式碼就是你交付的程式碼,你對應用程式裡的一切負責,不管它是怎麼寫的。

本頁涵蓋兩個相關主題: 使用 AI 工具開發應用程式的負責任做法,以及 AI 生成程式碼特有的安全議題。

你擁有這段程式碼

當 AI 代理產生函式、版面或 API 呼叫時,當你提交的那一刻,它就成為你的程式碼。 無論程式碼是手寫還是產生,標準相同:

  • 在接受前,閱讀並理解每一項變更
  • 測試 AI 生成的程式碼至少和手寫程式碼一樣徹底——模型能產生看似合理的程式碼,但其實有微妙錯誤
  • 不要用「AI 寫的」來解釋生產環境中的錯誤或安全問題

AI 工具並不能消除程式碼審查的需求。 他們改變的是你審查的內容,而不是你是否進行審查。

哪些內容不該寄給 AI 工具

請審慎決定要在提示和情境視窗中包含哪些內容:

  • 秘密與憑證 — 切勿將 API 金鑰、密碼或連線字串貼入提示中。 即使在私人聊天會話中,提示中的憑證也可能存在安全風險,並可能出現在日誌中。 詳見下方的 憑證與秘密處理 。
  • 客戶資料與個人識別資訊(PII) ——不要用真實的客戶姓名、電子郵件或使用資料作為範例輸入,即使是用來解釋錯誤也不要。 使用合成資料。
  • 專有商業邏輯 — 在分享內部系統程式碼前,了解貴組織對可傳送給外部 AI 服務的原始碼政策。

輸入驗證

AI 傾向於產生寬鬆的輸入處理。 在依使用者輸入採取行動前,務必先驗證長度、類型與範圍。

  • 切勿將原始 TextBox.Text 值傳給 shell 指令、檔案路徑或資料庫查詢。
  • 在寫入儲存或透過網路傳送前,先驗證字串長度。
  • 對於檔案路徑使用允許清單(allow-list)方法——檢查已解析的路徑是否停留在預期的目錄內。

在你的提示中加入這句:「 為所有面向使用者的欄位新增輸入驗證與長度限制。」

認證憑證與密碼管理

絕對不要硬編碼 API 金鑰、密碼或連線字串。 AI 經常產生佔位字串 "your-api-key-here" ——請把它們當作錯誤來處理。

  • 將憑證存放在 Windows.Security.Credentials.PasswordVault:

    var vault = new PasswordVault();
    vault.Add(new PasswordCredential("MyApp", username, password));
    
  • 執行時擷取:

    var credential = vault.Retrieve("MyApp", username);
    credential.RetrievePassword();
    
  • 在伺服器端或 CI 情境下,使用 environment variables 或 Azure Key Vault 來管理服務憑證。

封裝與相依完整性

在加入專案前,務必檢視 AI 代理建議的每一個 NuGet 套件。

  • 請在 nuget.org 確認出版商——找藍盾(Microsoft)或知名出版社。
  • 掃描已知漏洞:
    dotnet list package --vulnerable
    
  • 偏好有最新更新且維護積極的套件。

應用程式的功能與權限

AI 產生 Package.appxmanifest 的檔案通常包含廣泛的功能。 檢視該 <Capabilities> 區塊,移除所有應用程式不需要的內容。

常見且需要留意的過於寬泛能力:

  • broadFileSystemAccess — 只有當你的應用程式真的能讀取任意檔案系統路徑時才需要
  • documentsLibrary — 需商店特別核准;除非必要,否則避免
  • userAccountInformation — 僅在你需要使用者的姓名或相片時

程式碼審查檢查清單

在發佈 AI 生成程式碼前,請先確認:

  • 沒有硬編碼的秘密或憑證
  • 使用者輸入在使用前已驗證
  • 檔案路徑是否符合允許的目錄
  • 清單中宣告的最低必要能力
  • 掃描 NuGet 套件以尋找漏洞 (dotnet list package --vulnerable)
  • 儲存在 PasswordVault的敏感資料,不是 ApplicationData.LocalSettings
  • 所有網路通話皆使用 HTTPS
  • 例外訊息不會向使用者揭露內部路徑或堆疊追蹤

AI 模型的知識過時

你今天使用的 AI 工具是根據有截止日期的資料訓練的。 對於 Windows 開發來說,這代表模型看到的 UWP 範例遠多於 WinUI 3 範例——這正是這個文件區塊存在的原因。

不要將 AI 的輸出內容視為權威依據:

  • 目前的 API 名稱與命名空間(請依照 WinUI 3 API 參考驗證)
  • 目前的 SDK 版本與套件名稱
  • 商店政策與提交要求(經常變動)
  • 安全指引(模型可能重現過時的密碼學或認證模式)

Microsoft Learn MCP server 以及 WinUI 代理插件透過讓代理依據最新文件,減少陳舊知識,但任何安全關鍵內容都必須以原始來源驗證。

Accessibility

AI 生成的使用者介面經常省略無障礙支援。 以數百萬筆 XAML 範例訓練而成的模型,會重現這些範例的平均品質——而這種平均品質歷來往往會忽略 AutomationProperties、鍵盤導覽,以及足夠的對比度。

接受 AI 生成的 XAML 或控制程式碼時:

  • 檢查互動元素是否包含 AutomationProperties.AutomationId 和AutomationProperties.Name
  • 確認焦點順序是否合乎邏輯——定位點應遵循閱讀順序
  • 出貨前,請使用朗讀程式或其他螢幕閱讀器進行測試
  • 使用 Accessibility Insights for Windows 工具自動發現漏洞

請明確問你的客服人員:「在這個 XAML 裡,為所有互動元素新增無障礙屬性。」 別以為事情已經完成了。

如果你的應用程式使用 AI 功能

如果你是在應用程式中內建 AI 功能—— 而不只是用 AI 來撰寫應用程式——那麼會有額外的責任。

對使用者保持透明。 告訴使用者:

  • 你的應用程式會傳送給 AI 服務哪些資料
  • AI 是否做出影響他們的決策
  • 如果適當,如何選擇退出

對於重大行動,應讓人類持續參與決策流程。 不要讓 AI 自動刪除資料、購買、代使用者發送訊息,或在未經明確確認的情況下採取其他不可逆的行為。

測試偏差和非預期輸出。 AI 模型可能會產生帶有偏見、冒犯性或事實錯誤的輸出。 在發佈前,先用多樣化的輸入和邊緣案例測試你的應用程式 AI 功能。

使用內容安全工具。 如果您的應用程式使用 AI 生成或處理面向使用者的文字、圖片或其他內容,請使用 Azure AI 內容安全或類似的過濾功能,在有害輸出抵達使用者之前將其攔截。

授權與歸屬

AI 工具可能產生類似現有開源程式碼的程式碼。 在商業應用程式中使用 AI 生成程式碼之前:

  • 了解貴組織對 AI 生成程式碼貢獻的政策
  • 查看 Microsoft 關於 Copilot 和智慧財產權的指引
  • 請對任何第三方程式碼套用與開源授權合規檢查相同的標準

Microsoft 的負責任 AI 原則

Microsoft 設計 AI 產品與功能時,遵循六大原則:公平、可靠性與安全、隱私與安全、包容性、透明度與問責制。

詳情請見 microsoft.com/ai/responsible-ai。