開啟 3 天免費試用
註冊即可免費體驗全部高級功能。
*只限新用戶;每位用戶只可獲得一次試用。


要安全審核 GitHub Copilot 建議,先給它一項範圍清晰的小工作,並把每條行內建議視為不可信的草稿。先弄清預期行為,只接受你理解的程式碼行,其餘拒絕或 dismiss;核對程式庫規則和公開程式碼引用,執行必需的測試和掃描,檢查最終 diff,並取得人手程式碼審查。
這是通用使用 AI 方法在編程情境中的應用。它涵蓋 Copilot 建議出現的一刻,以及建議成為你改動一部分之前要通過的關卡。它不能取代更完整的 AI 產生程式碼首次執行前審核,後者還會檢查依賴、權限、外部副作用、數據遷移、生產設定和還原方案。
關鍵要點
- 只讓 Copilot 處理一項範圍清晰的小工作。
- 無法逐行解釋的程式碼一律不接受。
- 編輯器支援時,接受有用部分,拒絕其餘部分。
- 公開程式碼引用只是調查線索,不是放行結論。
- 執行程式庫的測試、lint、保安和知識產權關卡。
- 審閱完整 diff,因為不安全的改動可能不在可見建議之內。
選擇契約範圍窄、又能快速可靠驗證的工作:補完純函數、加入測試個案、轉換已知數據結構、編寫重複的序列化程式碼,或按程式庫既有的本地模式調整程式碼。先界定輸入、預期輸出、失敗行為和容許修改的檔案。
不要由驗證身份、授權、密碼學、依賴變更、數據遷移、CI/CD、生產設定、機密處理、破壞性操作或敏感數據開始。這些工作並非因為涉及 AI 就被禁止,但執行前必須走完整審核流程,並經相關負責人批准。
在註解或私人筆記中寫下工作範圍:
工作:為一個有文件說明的 enum 值加入解析。
容許檔案:解析器及其單元測試。
必需行為:未知值傳回現有的類型化錯誤。
禁止:新依賴、網絡存取、記錄 payload、退回為成功。
驗證:針對性單元測試、全部解析器測試、lint、最終 diff 審閱。
刪除不應留在生產程式碼的臨時提示註解。絕不可為了改善建議,把機密、權杖、客戶私人資料或機密漏洞細節寫進提示或原始碼註解。
只提供遵循本地契約所需的最少安全脈絡:附近類型、相關介面、預期錯誤模式、一個代表性測試,以及程式庫的命名或風格規則。脈絡太少會誘發捏造;太多則可能洩露數據並分散焦點。
GitHub 的最佳做法指引建議提供有用的脈絡、保持提示清晰、核實輸出,並把 Copilot 當作輔助工具,而不是專業能力的替代品。[2]脈絡可提高相關性,但不會令建議變得正確或安全。
評估補完內容前,先回答:
如果答不出這些問題,先研究程式庫才接受程式碼。不要讓 Copilot 憑函數名稱臆造契約。
GitHub 文件說明了接受整條行內建議、只接受其中一部分(partial acceptance)或 dismiss 的控制方式。[1]確切的快速鍵和介面因編輯器而異,請以現行文件和可見控制為準。
按下接受前先讀建議。追蹤每個條件、分支、傳回值、狀態改動、記憶體配置、錯誤和外部呼叫,並與工作範圍對照。只在適用於該組件時,才考慮零值、最大規模、格式錯誤輸入、重複呼叫、部分失敗、取消、並行和重試的情況。
檢查那些看似方便、實則削弱安全的模式:
看懂文字解釋並不足夠;Copilot 的解釋來自同一輔助渠道,不是獨立核實。
當一段連續內容明顯符合契約,而其餘部分多餘、帶推測或不安全時,就使用 partial acceptance。例如:保留形狀正確的配對分支,但拒絕捏造的退回邏輯;保留測試的準備部分,但自行編寫保安斷言。
局部接受後,重新閱讀最終程式碼。在原建議中有效的片段,拒絕前後幾行後可能變得不完整。檢查匯入、變數、分支覆蓋、資源清理和錯誤傳遞。
遇到以下情況,應 dismiss 或拒絕整條建議:
拒絕很正常:它把沒有依據的程式碼擋在 diff 外,也讓你有乾淨的起點重述工作。
GitHub 把程式碼引用(code referencing)描述為一項可能顯示建議與公開程式碼相符之處的功能,並在可行時附上程式庫和授權資料。[3]應把這種 public-code reference 當作來源和授權審查的線索。開啟被引用的資料,確認實際的授權條款和脈絡,評估是否與項目相容,並依照機構的署名和法律程序處理。
沒有顯示引用,並不證明程式碼沒有來源或授權風險。比對系統有門檻和涵蓋範圍限制,簡短或常見的模式可能缺乏辨識度。亦要檢查看似源自外部資料的異常註解、識別碼、演算法、檔頭或長段程式碼。
記錄處理結果:
不要以刪除署名或掩飾來源令相符提示消失。
先執行能證明目標行為的最小測試,再執行程式庫規定的較大範圍檢查。這些可能包括格式化、lint、類型檢查、單元及整合測試、依賴審查、secret scanning、code scanning、授權或 IP scanning,以及特定政策腳本。
NIST 安全軟件開發框架(SSDF)把安全開發實務分為四組:機構準備、保護軟件、產出具良好保安的軟件,以及回應漏洞。[4]Copilot 並不改變這些責任。產生的程式碼與手寫程式碼進入同一個開發生命周期。
測試應涵蓋契約和有意義的失敗模式,不只是跑通正常路徑。亦要審閱 Copilot 建議的測試:產生的斷言可能固化實作錯誤、以 mock 抹去風險,或遺漏負面個案。AI 輔助產生測試的流程可協助擴充個案,但判斷預期結果的應是審閱人。
必需關卡無法執行時,記錄缺口,不要把改動描述為已核實。本機單元測試通過,不等於完整程式庫關卡、CI、特定平台測試或生產驗證已通過。
檢查完整的實際 diff,不只是被標示的 Copilot 文字。接受建議可能觸發匯入、格式化、附近編輯、產生的檔案、鎖定檔變動或人手後續修改。確認 diff 只包含預期的檔案和行為。
按以下次序審閱:
重要的補完內容應使用建議紀錄:
| Suggestion ID | Task | Affected lines/files | Understood behavior | Public-code reference | License action | Tests | Security checks | Decision | Reviewer |
|---|---|---|---|---|---|---|---|---|---|
| C-01 | 解析 enum 值 | 解析器 + 測試 | 已知值正確對應;未知值失敗即關閉 | 沒有顯示/有引用 | 已調查/不適用 | 指令及結果 | 掃描及結果 | 接受/拒絕/修訂 | 姓名 |
紀錄應指向證據,不是照抄模型的自我評估。
驗證身份、授權、密碼學、依賴、數據遷移、CI/CD、生產設定、機密、個人或受規管數據、破壞性操作,以及外部可見的協議變更,都要升級處理。當建議跨越信任邊界、改變持久化儲存、削弱預設設定,或無法在本機環境安全測試時,也要升級。
完整的 AI 產生程式碼執行前審核,會在執行修補前檢查依賴、權限、網絡和檔案系統影響、數據遷移、還原及營運後果。這裏的行內接受流程只是那道更大關卡的其中一項輸入,不能取而代之。
不可以。能編譯並不證明授權、驗證、錯誤處理、並行、授權條款、保安或運作行為是正確的。
GitHub 文件說明,受支援的編輯器可以局部接受。接受後要重讀最終程式碼,因為拒絕前後幾行可能令已接受的片段變得不完整。
應該。拒絕它,弄清本地契約,然後提出較小的要求,或自行寫一個可驗證的較簡單改動。
不是。沒有顯示相符之處,不能證明來源清白。仍須照常進行授權條款、署名和程式碼審閱。
不能。它的解釋和產生的測試可能重複同一個錯誤。應依靠獨立規格、程式庫測試、掃描工具、證據和人手審閱。
凡涉及驗證身份、密碼學、依賴、數據遷移、CI/CD、生產設定、機密、敏感數據、破壞性影響或信任邊界的建議,都要走完整審核流程。
記錄未核實的關卡,不要聲稱改動安全或已完成。把它轉交能完成欠缺驗證的環境或審閱人。
由對程式庫和受影響領域負責的開發人員及獲授權審閱人決定。Copilot 提供的是建議,不是批准。AethoVPN 可以是開發人員網絡環境的一部分,但它不能審查 Copilot 建議中的不安全程式碼,也不能批准程式庫變更。
Sources checked 2026 年 8 月 31 日。
註冊即可免費體驗全部高級功能。
*只限新用戶;每位用戶只可獲得一次試用。