資安檢視總報告 — 模組頁撰寫規格

產出落點:docs/security-report/M<NN>-<slug>.md(只寫 md,不要自己 build) 範本:docs/security-report/M01-remote-agent.md —— 動筆前先完整讀過這份 讀者:PM 與老闆(不懂程式),以及稽核方。不是工程師。


§1

一、這份文件是什麼、不是什麼

是 不是
決策者消化過、要拿去對客戶/老闆講的版本 原始技術報告的翻版
會被當成稽核證據(證明「我們確實檢視過」) 內部施工紀錄
講「出事會怎樣、誰受影響、怎麼修」 講「程式碼哪裡寫錯」

原始技術報告保留在需求中心不動,不要改那邊任何檔案。


§2

二、頁面固定五段,順序不可變

front matter

---
title: <中文模組名>
eyebrow: Guidant AI 資安檢視 · 模組報告
h1: <中文模組名>(<模組代號>)
lede: <一兩句:這塊做什麼+這塊最值得知道的一件事>
---

第 1 段:這塊在產品裡做什麼

三到六句。讀者可能完全不知道這是什麼東西,要從「客戶會用到什麼功能」講起,不要從技術架構講。

如果這塊有「為什麼它是敏感目標」的理由(例如手上握有密碼、是所有功能的地基),用 ::: grid2 兩張卡並排:左邊「它平常在做什麼」、右邊「為什麼它是敏感目標」。沒有這種理由就不要硬湊。

第 2 段:檢視軌跡 ← 這段是稽核證據,不可省略

開頭一行:

**檢視期間**:YYYY-MM-DD ~ YYYY-MM-DD|**範圍**:N 個檔案(若有細分就註明)|**共 N 輪**

接一段引言,指向原始報告:

> **原始技術報告**放在需求中心的 [FR-0NN 站](https://guidantai-feature-doc.jedicotech.com/<資料夾名>/),檔名見下表最後一欄。那裡有每一輪的完整技術細節、檔案清單與逐條推理,供需要深究或稽核抽查時查閱。

然後一張表:

| 輪次 | 查什麼 | 檔數 | 覆核投票 | 結果 | 原始報告檔名 |

  • 「查什麼」寫白話(「代理程式怎麼證明我是誰」,不是「agent identity 與 enrollment」)
  • 「覆核投票」寫實際票數(「15 票全投完」)或實際狀況(「覆核未完整跑成」)
  • 「原始報告檔名」用行內程式碼標記包起來,不要做成連結(多數還沒發佈到公網,連過去是 404)

只要有任何一輪的覆核沒跑完整,就要加一個 ::: {.callout .warn} 說明:為什麼沒跑成、我們怎麼補的。不准隱瞞——誠實交代在稽核場合是加分的。

零發現的模組,這一段更重要——那頁的全部價值就在於證明「有查」。

第 3 段:問題一覽表

排序:先按風險(最嚴重→高→中→低),同風險的把同一分類排在一起。

表頭固定:

| # | 問題 | 風險 | 分類 | 出事會怎樣(誰受影響) | 怎麼修 | 狀態 |

欄位規則:

  • #:本頁內從 1 開始編。不要用跨模組總表的編號(那個是內部編號,讀者用不到)
  • 風險:🔴 **最嚴重** / 🟠 高 / 🟡 中 / ⚪ 低
  • 分類:只能用下面第三節那張表的九選一,不可自創
  • 出事會怎樣:⚠️ 這欄最容易寫錯。要寫業務後果不是技術現象:
    • ❌「不必登入就能取走明文帳密」← 技術現象
    • ✅「客戶會失去對自己機房主機的控制權——取走的是客戶自己的伺服器帳密,不只是我們系統的資料」
    • 特別要點出誰會是那個拿到的人(離職員工、外包、網路上任何人、同公司別部門的同事)
  • 怎麼修:一句話講修法方向,細節留到第 4 段
  • 狀態:⬜ **未修**(有工單就附卡號)/ ✅ 已修(要寫怎麼修好的)/ ⚠️ 部分修(要寫改了什麼、還剩什麼)
    • 狀態一律以總表 docs/features/security-scan-consolidated/README.md §3 為準。那裡標了兩次複查結果(2026-09-16、2026-09-20),有 ✅ 已修 / ⚠️ 部分修 的就照抄
    • 沒被複查過的一律寫 ⬜ **未修**,不要自己判斷

若有「範圍外順手撈到」的發現,另起一張小表,並註明它們不屬於這塊。

第 4 段:逐條展開

每條一個 ## 或 ### 段落。只有最嚴重/高風險的需要完整展開,中低風險的一小段講完即可。

完整展開包含:

  • 問題是什麼——白話,可以用比喻
  • 影響——能用表格列「打進去能拿到什麼」就用表格
  • 建議怎麼修——分步驟的用表格列出「步驟/做什麼/為什麼不能省」

要決策者拍板的事項用 ::: {.callout .decided} 框出來,並把選項的優缺點做成表。

第 5 段:這塊的結論

一個 ::: {.callout}(依嚴重度選 crit/warn/ok),內容:

  • 一句話:這塊的整體狀況
  • 建議:優先順序上的判斷,以及可以跟哪些一起修

後面接一張統計表:檢視輪數、通過的發現數、最嚴重幾條、已修幾條、已開工單幾張。

最後固定加:

---

| 你想知道 | 看哪裡 |
|---|---|
| 我們用什麼方法查、結果有多可信 | [檢視方法與工具](GUIDE-01-method-and-tools.html) |
| 其他模組的檢視結果 | [回總報告首頁](index.html) |

§3

三、分類只能用這九種(跨模組統一,不可自創)

分類 什麼情況用
身分驗證缺失 根本不檢查對方是誰
只驗登入、不檢查歸屬 知道你是誰,但不問「這筆資料是你的嗎」
客戶資料沒隔開 A 客戶看得到 B 客戶的東西
密碼外流 憑證已經在外面了(寫死、進版控、公開網站)
敏感內容寫進日誌 密碼原文落在紀錄檔
回應夾帶不該送的欄位 多送了內部欄位出去
外部送什麼就收什麼 不驗輸入
防竄改機制被削弱 專用於 jedi-integrity 那塊
資源耗盡 一個人就能讓系統對所有人停擺
要先做產品決策 不是技術問題,是規則沒定

(實際十項,分類名照抄,不要改字。)


§4

四、白話標準 ← 最常出錯的地方

「白話」不是把句子講得口語,是讀者完全不需要技術背景就能懂。

不可以寫 要改成
API / 端點 / route 功能、入口、管道
token / credential 通行證、帳號密碼、金鑰
RLS / tenant isolation 客戶資料隔離
middleware / decorator (改講它做的事,例如「把關的那道檢查」)
repository / service 層 (不要提分層,改講「負責取資料的那段程式」)
CVE / CVSS (不要用,改講嚴重程度)
研究員 / 檢查員 / 候選 / 驗證章 這些是方法章的術語,模組頁不要再提,直接講結果
TLS 憑證驗證被停用 連線時沒有確認對方是不是真的那個網站

檔名與行號可以留(這是對內版,而且稽核要追得到),但不要讓它們出現在「出事會怎樣」那欄。

禁止的說法:

  • 「已確認安全」「沒有漏洞」← 我們的方法不能宣稱這個,只能說「這一輪在這個範圍內沒有找到問題」
  • 「全面檢視」「完整涵蓋」← 同上
  • 任何把「工具沒找到」講成「這裡乾淨」的說法

§5

五、素材從哪裡來

要什麼 去哪裡找
這塊做什麼、主要發現摘要 docs/features/security-scan-consolidated/README.md §0.5 的「已掃完」表
每一輪查什麼、票數、結果 同檔 §1「逐輪掃描進度」,找對應 FR 的那幾列
每條問題的完整描述、風險、修法 同檔 §3.1(資安類)與 §3.2(非資安但真 bug),用 FR 編號搜
問題的目前狀態(已修/部分修) 同上,§3 開頭有兩次複查結果,條目上直接標了
該模組的檢視期間、輪次細節 docs/features/<該 FR 資料夾>/README.md 與 SUMMARY.md(若有)

§3.2 的非資安項目也要收進來——它們不是資安問題但確實是 bug,分類用「要先做產品決策」或在表下另起一小節說明。


§6

六、交件前自檢


§7

七、紀律

  • 只寫 docs/security-report/M<NN>-<slug>.md 一個檔,不要碰別的
  • 不要自己跑 build(render_index.py),統籌者統一做
  • 不要改需求中心任何檔案
  • 數字一律從上面第五節的來源抄,不要自己算、不要憑印象
  • 查不到的寫「查不到」並在回報中列出,不要猜