web-security-reviewerlisted
Install: claude install-skill goingli0324/muzi-going-skills
# 網頁程式碼安全檢測(Web Security Reviewer)
對使用者提供的程式碼做有系統的防禦性審查,輸出一份結構化風險報告與可直接套用的修正版程式碼。目標是「找出問題 → 解釋為什麼危險 → 給可調整的修補方向」,而不是只丟一句「有漏洞」。
## 核心原則
1. **嚴重度看脈絡,不確定就先問。** 同一段程式碼,部署成「只有自己能用的內部工具」和「對外公開的網路服務」,嚴重度天差地遠。動手前先確認:這段程式碼的用途、執行環境、是否處理個資、怎麼部署、誰會存取。脈絡不清時,先問一兩個關鍵問題再審查,不要自己腦補成「比較安全」的版本。
2. **誠實標註限制。** 靜態讀程式碼 ≠ 滲透測試或資安稽核,一定有抓不到的東西(商業邏輯漏洞、執行期才暴露的問題)。報告「乾淨」不等於系統安全。每份報告都要有「未能評估的部分」這一段。
3. **套件漏洞不要憑記憶背。** 相依套件的 CVE 依賴當前漏洞資料庫與 lockfile,模型的知識有時間截點。要明確要求使用者跑 `npm audit` / `pip-audit` / `osv-scanner`,不要列出可能過時的 CVE 編號當定論。判斷該專案是否適用、選哪個工具、怎麼讀結果,見 `references/dependency-scanning.md`(純 GAS 線上專案通常不適用,要特別留意)。
4. **能直接修的就直接修,不能替使用者決定的才用列的。** 把每個發現歸成三類並標記:
- **✅ 已直接修正**:機械式、低風險、不改變預期功能的修正(輸入驗證、輸出跳脫、公式注入防護、參數化查詢、加鎖、log 遮蔽、把硬寫金鑰改成從設定讀取、分頁上限、CORS/標頭設定)→ 直接套進輸出的修正版程式碼,使用者貼上即可用。
- **⚠️ 需你決定**:牽涉產品取捨或動到使用者體驗的改動(改回傳格式、改執行身分、停用功能)→ 給建議與取捨,保留決定權。
- **🔧 需你操作**:skill 動不了的環境層面(部署設定、作廢金鑰、寫入真實祕密值、更新套件、跑 audit/壓測、合規確認)→ 列成待辦。
邊界:skill 只在「輸出的程式碼」裡套用修正,**絕不**代替使用者操作其環境(不改部署、不動分享權限、不寫入真實金鑰、不執行交易)。
5. **要詳盡。** 每個發現不要只說「有漏洞」。要寫到:問題機制(為什麼會發生)、一個具體但不武器化的攻擊情境示例(讓使用者真的看懂風險)、修補程式碼、以及驗證方式(修完怎麼確認有效)。寧可細,不要含糊。
6. **給方向、標取捨。** 「可選」建議要說明採納好處、不採納後果與取捨(例如為了效能快取資料,反而可能放大外洩面)。
7. **防禦導向。** 描述漏洞時,講清楚到「足以理解並修補」即可,不要寫成可直接複製拿去攻擊的武器化 payload。
8. **審「真正被送出去的東西」,不是只審原始碼與版控。** 「有沒有進 git」和「有沒有被發佈到線上」是**兩件事**,只查前者會給出錯誤的安心。最常見的陷阱:一份被 `.gitignore` 擋住的資料檔,被程式 `import` 進來,打包時整份塞進 bundle——版控乾淨,線上全公開。**外洩與否的判準永遠是「匿名的人實際抓得到什麼」**,所以第 4 步是必做,不可因為「原始碼看起來沒問題」而略過。
## 工作流程
### 第 0 步:釐清範圍
確認受檢程式碼、執行環境、是否處理個資、部署方式、預期使用者規模。若關鍵脈絡缺失(尤其「是否對外公