什麼是程式碼掃描?
程式碼掃描會使用 CodeQL 來分析 GitHub 存放庫中的程式碼,以找出安全性弱點和編碼錯誤。 程式碼掃描適用於所有公用存放庫,以及啟用 GitHub 進階安全性的組織所擁有的私人存放庫。 如果程式碼掃描在您的程式碼中發現潛在的弱點或錯誤,GitHub 會在存放庫的 [安全性] 索引標籤中顯示警示。修正觸發警示的程式碼之後,GitHub 會關閉警示。
您可以使用程式碼掃描來尋找程式碼中現有的問題、予以分級和排定優先順序修正。 程式碼掃描也會防止開發人員引進新的問題。 您可以排程特定天數和時間的掃描,或在存放庫中發生特定事件 (例如推送) 時觸發掃描。
在本單元中,您將了解 CodeQL、設定程式碼掃描的三個選項,以及將 CodeQL 工作流程新增至存放庫的方法。
關於使用 CodeQL 進行程式碼掃描
CodeQL 是 GitHub 所開發的程式碼分析引擎,可讓安全性檢查自動化。 您可以使用 CodeQL 分析程式碼,並以程式碼掃描警示型態顯示結果。 有三種主要方式可以設定 CodeQL 分析進行程式碼掃描:
- 使用預設設定,快速設定 CodeQL 分析,以進行存放庫上的程序碼掃描。 預設設定會處理選擇要分析的語言、要執行的查詢套件,以及使用手動設定語言和查詢套件的選項來觸發掃描的事件。 此設定選項會以 GitHub Action 的形式執行程式碼掃描。
- 使用進階設定,將 CodeQL 工作流程直接新增至您的存放庫。 將 CodeQL 工作流程直接新增至您的存放庫會產生可自訂的工作流程檔案,該檔案會使用 github/codeql-action 以 GitHub Action 的形式執行 CodeQL CLI。
- 直接在外部 CI 系統中執行 CodeQL CLI,並將結果上傳至 GitHub。
CodeQL 會將程式碼視為資料,與傳統靜態分析器相較之下,可讓您更有信心地找出程式碼中的潛在弱點。 您會產生 CodeQL 資料庫來代表程式碼基底,然後在該資料庫上執行 CodeQL 查詢,以找出程式碼基底中的問題。 當您使用 CodeQL 搭配程式碼掃描時,查詢結果會顯示為 GitHub 中的程式碼掃描警示。
CodeQL 同時支援編譯和解譯的語言,而且可以在下列支援的語言撰寫的程式代碼中尋找弱點和錯誤:
- C 或 C++
- C#
- Go
- Java/Kotlin
- JavaScript/TypeScript
- Python
- Ruby
- Swift
下一節說明如何將 CodeQL 工作流程新增至存放庫。 您將瞭解如何使用 [使用協力廠商工具啟用程式碼掃描] 單元中的外部工具設定 CodeQL。
使用 [預設設定] 在存放庫中啟用 CodeQL
如果您有存放庫的寫入權限,可以為該存放庫設定程式碼掃描。
請遵循下列步驟,使用 CodeQL GitHub Actions 工作流程來設定程式碼掃描:
在 GitHub.com 上,瀏覽至存放庫的主頁面。
在您存放庫的名稱下,選取 [安全性]。
選取 [設定程式碼掃描]。 如果無法使用此選項,請要求組織擁有者或存放庫管理員啟用 GitHub 進階安全性。
在 [設定] 下拉式功能表中,選取 [預設]。
檢閱預設選項。 如有需要,請選取新視窗左下角的 [編輯] 按鈕,以自訂 CodeQL 的執行方式。
預設用於程式碼掃描的
on:pull_request和on:push觸發程序各有不同用途。 您將在 [設定程式碼掃描] 單元中深入瞭解這些觸發程序。當您準備好開啟程式碼掃描後,請選取 [啟用 CodeQL]。
在預設的 CodeQL 分析工作流程中,程式碼掃描會設定為在每次將變更推送至任何受保護的分支或針對預設分支提出提取要求時,分析您的程式碼。 一旦進行推送,系統便會自動執行程式碼掃描。
在上一節,我們使用預設設定,啟用了程式碼掃描,其以 GitHub Action 的形式執行程式碼掃描,而無需維護工作流程檔案。 另一個選項是 [進階] 安裝程式,其會產生您可針對進階設定和更多步驟進行編輯的預設工作流程檔案。 我們將討論如何使用進階設定,以在稍後的單元中設定程式碼掃描。
使用 GitHub Actions 執行程式碼掃描會影響您的每月計費分鐘數。 如果您想要在帳戶中包含的儲存體或分鐘數以外使用 GitHub Actions,將會向您收取其他使用量的費用。
關於 Actions 費用
程式碼掃描會使用 GitHub Actions,而且每次執行程式碼掃描工作流程都會耗用 GitHub Actions 的分鐘數。 公用存放庫和自我裝載執行器可以免費使用 GitHub Actions。 若為私人存放庫,每個 GitHub 帳戶都會收到一定數量的免費分鐘數與儲存體,視與帳戶搭配使用的產品而定。 消費限制可控制超出內含金額的任何使用量。 如果您是每月計費的客戶,帳戶的預設消費限制為 0 美元 (USD),這可防止私人存放庫產生超過帳戶內含金額的額外分鐘數或儲存體使用量。 如果您依發票支付帳戶費用,您的帳戶將會有無限的預設消費限制。 分鐘數每個月都會重設,但儲存體使用量不會。