GH-500 數位教科書 開啟互動版

D4 模擬題:設定與使用 Code Security

D4「設定與使用 Code Security」12 題原創模擬題,附正確答案、解析與常見陷阱。選項順序在互動版會隨機排列。

第 43 題(D4-O1)

專案主要用 PHP 撰寫,團隊想啟用 CodeQL default setup。官方文件對這個做法怎麼說?

單選題,選項:

  • 會自動改用 PHP 專用的查詢集
  • 會要求先設定 manual build mode
  • CodeQL 不支援 PHP,可能不產生警示
  • 只能使用 security-extended 查詢集
看答案與解析

正確答案:CodeQL 不支援 PHP,可能不產生警示

解析:CodeQL 不支援清單以外的語言(例如 PHP、Scala);嘗試使用可能不產生警示,分析也不完整。

常見陷阱:看到「語言自動偵測」就以為什麼語言都能掃;清單以外的語言要改用能輸出 SARIF 的第三方工具。

依據:Code scanning with CodeQL

在互動版作答這題

第 44 題(D4-O1)

一個 Java repository 啟用 code scanning,沒有任何建置設定。CodeQL 預設用哪種 build mode 建立資料庫?

單選題,選項:

  • autobuild,偵測並嘗試建置
  • none,不建置,直接從程式碼建立
  • manual,使用 workflow 定義的步驟
  • none,但要先啟用 dependency caching
看答案與解析

正確答案:none,不建置,直接從程式碼建立

解析:C/C++、C#、Java 與 Rust 預設用 none(不建置);其他編譯式語言(如 Go、Kotlin、Swift)用 autobuild。

常見陷阱:Java 常被當成一定要建置的語言;現在預設是不建置。

依據:CodeQL code scanning for compiled languages

在互動版作答這題

第 45 題(D4-O1)

團隊想在 default setup 下執行比預設更多、精確度稍低的查詢。應該選哪個 query suite?

單選題,選項:

  • default,精確度高、誤報少的內建集合
  • security-and-quality,含可維護性與可靠性查詢
  • 自訂 .qls 查詢集,由 YAML 定義
  • security-extended,介面上稱為 Extended
看答案與解析

正確答案:security-extended,介面上稱為 Extended

解析:security-extended 是 default 加上精確度與嚴重度稍低的查詢,可用於 default setup;security-and-quality 與自訂 suite 需要 advanced setup。

常見陷阱:security-and-quality 看起來更完整,但它只能用於 advanced setup。

依據:CodeQL query suites

在互動版作答這題

第 46 題(D4-O2)

default setup 啟用後,在下列哪種情況下不會觸發掃描?

單選題,選項:

  • 來自 fork 的 pull request
  • 對預設分支的 push 提交
  • 以預設分支為目標的 pull request
  • 啟用 default setup 當下的初始掃描
看答案與解析

正確答案:來自 fork 的 pull request

解析:default setup 掃描啟用時、push 到預設或受保護分支、以及針對預設或受保護分支的 pull request,但不含來自 fork 的 pull request。

常見陷阱:pull request 觸發看似包含所有來源;fork 來的被排除。

依據:About setup types for code scanning

在互動版作答這題

第 47 題(D4-O2)

default setup 的每週排程掃描要在什麼條件下才會運作?

單選題,選項:

  • 啟用後立即開始,不需任何活動
  • 啟用滿 180 天之後才會開始
  • 過去 180 天內有 push 或 PR 觸發
  • 每次初始掃描完成後就會開始
看答案與解析

正確答案:過去 180 天內有 push 或 PR 觸發

解析:每週排程的前提是過去 180 天內有 push 或 pull request 觸發過掃描;初始掃描與因設定變更觸發的掃描不算。

常見陷阱:初始掃描看似算一次活動,但官方明說它不會啟動或延長排程。

依據:About setup types for code scanning

在互動版作答這題

第 48 題(D4-O2)

組織設定了 github-codeql-config-file 屬性,而某個 advanced setup workflow 也在 codeql-action/init 指定了 config-file。最後使用哪一個?

單選題,選項:

  • repository 屬性的值,因為屬於組織層級
  • 兩個設定檔合併,重複的鍵互相覆寫
  • 由設定檔的檔名字母順序來決定
  • workflow 中明確指定的 config-file
看答案與解析

正確答案:workflow 中明確指定的 config-file

解析:advanced workflow 明確指定的 config-file 輸入優先於 repository property;這讓 advanced workflow 可使用不同的設定。

常見陷阱:組織層級通常優先,但這裡是明確指定的 workflow 輸入勝出。

依據:Repository properties for code scanning

在互動版作答這題

第 49 題(D4-O3)

開發者在功能分支修好一則警示,但預設分支尚未合併。警示頁面的狀態會怎麼顯示?

單選題,選項:

  • 關閉,因為功能分支已修復
  • 仍反映預設分支,看 Affected branches
  • 顯示為 in progress,等待合併
  • 自動關閉,並從警示清單移除
看答案與解析

正確答案:仍反映預設分支,看 Affected branches

解析:警示頁面只反映預設分支的狀態;其他分支的狀態在 Affected branches 檢視。

常見陷阱:修復所在的分支不等於警示頁面反映的分支。

依據:Code scanning alerts

在互動版作答這題

第 50 題(D4-O3)

pull request 上的 code scanning 檢查只發現 warning 與 note 等級的警示。檢查結果會是什麼?

單選題,選項:

  • 失敗,因為任何警示都會使檢查失敗
  • 失敗,直到管理員審查過每則警示
  • 成功,較低嚴重度視為警告或附註
  • 略過,不顯示任何註解與檢查結果
看答案與解析

正確答案:成功,較低嚴重度視為警告或附註

解析:只有 error、critical 或 high 會使檢查失敗;較低嚴重度視為警告或附註,檢查成功。可在 repository 設定中覆寫。

常見陷阱:以為任何警示都會擋下 pull request;預設只有高嚴重度才會。

依據:Triaging code scanning alerts in pull requests

在互動版作答這題

第 51 題(D4-O3)

下列哪些是 Copilot Autofix 與 agentic autofix 的共同點,或 Copilot Autofix 的特性?(選 3 項)

複選題,選項:

  • 由 LLM 根據程式碼與分析結果產生修復
  • 一次可指派最多 25 則警示給 agent
  • Copilot Autofix 的建議不消耗 credits
  • 需要 Copilot 授權才能使用
  • 盡力而為,不保證每則警示都成功
看答案與解析

正確答案:由 LLM 根據程式碼與分析結果產生修復;Copilot Autofix 的建議不消耗 credits;盡力而為,不保證每則警示都成功

解析:兩者都用 LLM 產生修復,且都是盡力而為;Copilot Autofix 不消耗 AI credits。「最多 25 則警示」是 agentic autofix 的批次指派,兩者都不需要 Copilot 授權。

常見陷阱:25 則的上限和 AI credits 的消耗屬於不同的功能,容易混在一起。

依據:About autofix for code scanning

在互動版作答這題

第 52 題(D4-O3)

組織想用 ruleset 阻擋含高嚴重度 code scanning 警示的 pull request 合併,但某 repository 根本沒設定 code scanning。這個規則會怎麼運作?

單選題,選項:

  • 自動為該 repository 啟用 code scanning
  • 因必要工具未設定而阻擋,且不自動啟用
  • 不阻擋,因為該 repository 沒有警示
  • 改由 status checks 取代這條規則
看答案與解析

正確答案:因必要工具未設定而阻擋,且不自動啟用

解析:必要工具未在 repository 設定也是阻擋條件之一;設定規則不會自動啟用 code scanning;它與 status checks 無關。

常見陷阱:以為規則會順便啟用掃描;它只是把「沒掃描」也視為不通過。

依據:Code scanning merge protection

在互動版作答這題

第 53 題(D4-O4)

管理員發現單一 repository 的 code scanning 沒有如預期產生警示,想先看這個 repository 內各語言的檔案涵蓋率與最近掃描時間。應該看哪裡?

單選題,選項:

  • Tool status page,看這個 repository 的工具狀態
  • Security overview 的 Coverage,看各 repository 有無啟用
  • Dependency graph 的 Dependencies 檢視與清單
  • Actions 的 workflow 執行清單與各次執行紀錄
看答案與解析

正確答案:Tool status page,看這個 repository 的工具狀態

解析:Tool status page 顯示各 code scanning 工具的設定狀態、最近掃描時間、各語言檔案涵蓋率與錯誤訊息,是除錯的起點;它只顯示 repository 預設分支,不在組織層級。

常見陷阱:Coverage 檢視看的是各 repository 有沒有啟用安全功能,不是單一工具對各語言的檔案涵蓋率。

依據:About the tool status page

在互動版作答這題

第 54 題(D4-O4)

同一個 workflow 要對同一個 commit 用 upload-sarif 上傳同一工具的兩個結果檔。必須提供什麼?

單選題,選項:

  • 兩個檔案合併成單一 SARIF 檔再上傳
  • 每個檔案使用不同的 SARIF 版本
  • 在 repository 設定中啟用多重上傳
  • 為每組結果指定唯一的 category
看答案與解析

正確答案:為每組結果指定唯一的 category

解析:預設每次分析預期一個 SARIF 檔;同一 commit 上傳多組結果時,必須為每組指定唯一的 category。

常見陷阱:category 通常在 CodeQL action 自動設定,所以容易忘記其他工具要自己指定。

依據:Uploading a SARIF file to GitHub

在互動版作答這題