Claude Code 安全性審查:逐步指南與 2026 年 GitHub Action 自動化
Markdown如何使用 Claude Code 中的 /security-review 檢查 vibe 專案的安全性。包含設定步驟、GitHub Action 範本、6 種漏洞,以及坦誠說明的限制。
閱讀全文
原始資料的作者描述了自己的經驗:「我剛在自己的 vibe 專案上執行 security-review,團隊在 4 分鐘內就找出幾個真實問題,而且都已經修好了。」這項工作過去得花一整天請外部顧問處理。
工具設定的其他資料請參閱 Ailoot 文件。
Claude Code 中的 /security-review 是什麼?
重點
/security-review 是 Claude Code 內建的指令,可直接從終端機對整個專案或目前的變更進行安全性分析。Anthropic 在 2026 年 2 月 20 日將它納入 Claude Code Security 推出,並開放給所有 Pro、Max 和 API Console 使用者。費用會從一般 Claude API 餘額中扣除。
這個指令有兩種執行模式。本機模式:在終端機執行 /security-review,Claude 會讀取儲存庫並產生報告。伺服器端模式:將相同引擎設定為 GitHub Action,讓它在每個 Pull Request 上自動留下行內留言。
與傳統 SAST 掃描器(Snyk Code、Semgrep、SonarQube)不同,/security-review 不依循固定規則。它像現場工程師一樣閱讀程式碼:追蹤資料流、理解你使用的框架和信任邊界的位置,並找出規則未描述的漏洞。
Claude Code Security 會像人類安全研究員一樣閱讀並推理你的程式碼:理解各元件如何互動、追蹤資料在應用程式中的流動,並找出規則式工具會漏掉的複雜漏洞。
這不代表 /security-review 可以取代外部滲透測試或在預備環境進行的實際測試。它可自動完成部分初步程式碼審查,但本文沒有測量任何稽核涵蓋比例。以下將說明如何正確執行,以及 Claude 會在你的專案中找出什麼。
如何用 5 個步驟執行 /security-review?
重點
將 Claude Code 更新至最新版本,在終端機開啟專案,執行 /security-review,等待報告(一般專案約需 1 到 5 分鐘),閱讀嚴重性判定,再請 Claude 套用修正。這個指令適用於任何技術堆疊:Next.js、Django、FastAPI、Rails、Go、Rust。無須特別設定。
步驟 1. 更新 Claude Code。 此指令從 2026 年 2 月 20 日發布的版本起即可使用。
claude update
如果你透過 npm 安裝 Claude Code,也可以執行:
npm install -g @anthropic-ai/claude-code@latest
確認 /security-review 已出現在指令清單中:
claude /help | grep security
步驟 2. 開啟專案並登入 Claude Code。
cd ~/projects/my-vibe-project
claude
步驟 3. 執行指令。 在 Claude Code 中直接輸入:
/security-review
Claude 會自動進行 3 個分析階段:
- 儲存庫脈絡研究 - 讀取結構並識別技術堆疊、路由和資料庫查詢。
- 比較分析 - 將目前狀態與此技術堆疊常見的漏洞模式比較。
- 漏洞評估 - 列出每項疑似問題,並以 1 到 10 的尺度標示信心程度。只有信心程度 ≥ 8 的發現會列入報告。
步驟 4. 閱讀報告。 輸出格式為 Markdown 表格。對每項問題,Claude 都會提供:
- 檔案與行號(例如
src/auth/login.ts:42) - 嚴重性(HIGH / MEDIUM / LOW)
- 類別(
sql_injection、xss、auth_bypass、insecure_storage) - 說明 - 問題所在
- 利用情境 - 攻擊者可能如何利用
- 建議 - 修正方式
步驟 5. 請它套用修正。 接著,你可以像使用一般代理程式一樣與它合作:
「套用報告中的 HIGH 嚴重性修正,一次一項,並附上 PR 說明。」
Claude 會開啟各個檔案並提出修改;由你確認。在一個實際專案中,我用 40 分鐘解決了 5 項發現,而原本預計要花 3 小時。
/security-review 會找出哪些漏洞?
重點
Claude 能找出 6 類問題:SQL 注入及一般注入、XSS、驗證與授權問題、敏感資料外洩、第三方相依套件的漏洞,以及程式碼中硬編碼的機密。這個指令也能處理分散在多個檔案中的驗證邏輯,規則式掃描器做不到這點。
預設分析內容的完整清單列於 Anthropic 官方文件:
| 類別 | 檢查項目 |
|---|---|
| SQL 注入 | 直接串接字串組成 SQL、不安全的 ORM 呼叫(未帶參數的 raw())、Prisma $queryRawUnsafe |
| XSS | 使用 dangerouslySetInnerHTML 渲染但未清理、未自動跳脫的範本系統、來自使用者輸入的 innerHTML |
| 驗證缺陷 | 可重複使用的權杖、API 路由缺少權限檢查、沒有到期日的 JWT、工作階段固定攻擊 |
| 不安全的資料處理 | 僅在用戶端進行驗證、回應包含多餘欄位(過度擷取)、開放重新導向 |
| 相依套件漏洞 | 有漏洞的 npm/pip/cargo 套件版本,透過 npm audit 及同類工具檢查 |
| 機密 | 硬編碼的 API 金鑰、.env.example 中的權杖、程式碼中的密碼 |
此外,這個指令也涵蓋自動掃描器很少檢查的類別:
- 命令注入 - 在 shell 中執行使用者輸入(
child_process.exec(userInput)) - 路徑遍歷 - 透過
../../etc/passwd載入檔案 - XXE - 含有外部實體的 XML
- 範本注入 - Jinja/Handlebars/EJS 中的 SSTI
- NoSQL 注入 - MongoDB 查詢中的
$ne、$gt運算子 - 加密使用不當 - 使用 MD5、ECB 模式、靜態 IV
Claude 會為每項發現標示嚴重性。尺度很簡單:
- HIGH - 無須驗證即可遠端利用、影響所有使用者的資料外洩
- MEDIUM - 需要額外條件才能利用(需要工作階段/特定輸入)
- LOW - 潛在攻擊途徑,目前並不嚴重,但值得修正
值得一提的是,在標準設定中,Claude 不會回報 DoS、速率限制、記憶體耗盡、未證實影響的開放重新導向、正規表示式注入/ReDoS 或日誌偽造。這是刻意的,目的是避免大量雜訊。如果這些類別對你很重要,可以擴充規則(請參閱下方的誤報過濾章節)。
如何設定 GitHub Action 進行自動審查?
重點
Anthropic 發布了官方 Action:anthropics/claude-code-security-review@main。只要加入一個 workflow 檔案就能連接,並在每個 Pull Request 上自動留下行內留言,指出找到的漏洞。請設定 CLAUDE_API_KEY 與 workflow 權限。官方 Action 提醒它未針對提示注入強化,應審查可信任 PR;啟用前先檢查協作者與 workflow 存取權。
步驟 1. 取得 API 金鑰。 前往 console.anthropic.com,建立 API 金鑰並複製。
步驟 2. 將金鑰加入儲存庫機密。 在 GitHub 中,前往 Settings → Secrets and variables → Actions → New repository secret。名稱設為 CLAUDE_API_KEY,值填入你的金鑰。
步驟 3. 建立 workflow 檔案。 將檔案存為 .github/workflows/security.yml:
name: Security Review
permissions:
pull-requests: write
contents: read
on:
pull_request:
jobs:
security:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
ref: ${{ github.event.pull_request.head.sha || github.sha }}
fetch-depth: 2
- uses: anthropics/claude-code-security-review@main
with:
comment-pr: true
claude-api-key: ${{ secrets.CLAUDE_API_KEY }}
步驟 4. 將分支合併到 main。 下一個 PR 建立時,Action 就會自動執行。
Action 的工作內容:
- 每次有 Pull Request 開啟或同步時執行。
- 取得 PR 分支與 main 之間的差異。
- 執行與本機
/security-review相同的引擎。 - 直接在有疑似問題的程式碼行上張貼行內留言。
- 在 Job Summary 中附上完整報告副本。
permissions 的重要細節:
pull-requests: write- 用於張貼行內留言。contents: read- 用於讀取程式碼。沒有write。Action 不會自行修改程式碼,只會回報問題。
這組權限足以用於私人儲存庫。若是公開儲存庫,且你使用可重用的 workflow,可以另外指定 actions: read。
如何過濾誤報並調整敏感度?
重點
此 Action 有 9 個輸入項目,可用來設定專案行為。主要項目包括:exclude-directories(例如 tests/,fixtures/)、false-positive-filtering-instructions(存放「這不是漏洞,因為……」等規則的 md 檔案路徑),以及用於額外領域特定檢查的 custom-security-scan-instructions。
GitHub Action 輸入項目的完整表格(來源:儲存庫 README):
| 輸入項目 | 預設值 | 功能 |
|---|---|---|
claude-api-key | - | Anthropic API 金鑰。必填。 |
comment-pr | true | 是否在 PR 中張貼行內留言 |
upload-results | true | 是否將結果儲存為 artifact,保存 90 天 |
exclude-directories | - | 以逗號分隔:tests/,docs/,fixtures/ |
claude-model | claude-opus-4-1-20250805 | 使用哪個模型 |
claudecode-timeout | 20 | 逾時分鐘數 |
run-every-commit | false | 是否在每次 push 時執行,而非只在 PR 時執行 |
false-positive-filtering-instructions | - | 存放規則的 md 檔案路徑 |
custom-security-scan-instructions | - | 存放額外檢查項目的 md 檔案路徑 |
設定誤報過濾的範例。 建立 .claude/security/false-positives.md 檔案:
# 本專案的誤判過濾規則
- `src/lib/email/layout.ts` 中的任何 `dangerouslySetInnerHTML` 都是安全的——
HTML 是由可信任的範本組成,並在寫入資料庫時透過 `sanitize-html` 處理,
而不是在呈現時處理。
- 不要回報 `__tests__/fixtures/*.ts` 中硬編碼的測試 API 金鑰。
所有金鑰都以 `sk-test-fake-` 開頭。
- `src/lib/admin/migrations.ts` 中的 SQL 串接是可接受的——該檔案只會以 root 身分執行,
且輸入資料來自環境變數。
在 workflow 中指定該檔案:
- uses: anthropics/claude-code-security-review@main
with:
comment-pr: true
claude-api-key: ${{ secrets.CLAUDE_API_KEY }}
false-positive-filtering-instructions: .claude/security/false-positives.md
自訂安全性掃描指示的設定方式類似。建立一個檔案,加入對你的專案特別重要的規則:
# 本專案的其他檢查項目
- `/api/admin/*` 底下的所有端點都必須透過共用包裝器檢查管理員角色。
若沒有這個包裝器,嚴重性為 HIGH。
- 所有 YooKassa / CloudPayments webhook 都必須在解析本文前驗證簽章。
若未驗證,嚴重性為 HIGH。
- Magic-link 權杖必須只能使用一次(第一次有效請求後標記為已使用)。
可重複使用的權杖嚴重性為 MEDIUM。
這已經不是 Anthropic 預設範本,而是將你對專案的專業知識轉化為 Claude 每次都會套用的規則。這就是「方法論勝過模型」的核心。
若想進一步了解 Claude 的脈絡方法,請參閱指南:「如何設定 CLAUDE.md」與「Claude Code 中的 Second Brain」。
Claude 沒有找出什麼?為什麼?坦誠說明其限制
重點
程式碼審查本身不會測試執行中的應用程式或驗證部署環境。它可能指出程式中潛在競爭條件、業務邏輯或設定問題,但仍需 staging 測試與實際部署檢查來確認行為和剩餘風險。
Anthropic 清楚列出預設停用的項目及原因(來源:儲存庫 README):
- 阻斷服務 - 雜訊太多,而且影響幾乎總是很低。
- 速率限制疑慮 - 在基礎架構層處理,而非在程式碼中處理。
- 記憶體/CPU 耗盡 - 原因相同。
- 沒有已證實影響的一般輸入驗證問題 - 驗證每個欄位會造成大量誤報。
- 開放重新導向 - 通常是預期行為。
缺少執行或部署證據時,單靠程式碼審查無法完整驗證以下事項:
- 正式環境伺服器設定。 NGINX 標頭、CORS 政策、TLS 設定、監聽連接埠。這些都需要在預備環境中手動檢查。
- 競爭條件。 例如,同時提出退款請求時發生重複扣款。靜態分析可指出可疑模式,但並行行為仍需測試。
- 付款業務邏輯缺陷。 如果訂單總額由用戶端計算,並直接傳送給付款服務供應商,嚴重性屬於 HIGH;但若沒有明確說明付款應如何運作,Claude 不一定能看出這種模式。
- 資料庫層級的 IDOR。 如果查詢
SELECT * FROM orders WHERE id = $1沒有檢查WHERE user_id = $session.userId,Claude 通常能發現。但若檢查是透過 ORM middleware 實作,而 Claude 看不到完整資料流,就可能漏掉。 - 社交工程/網路釣魚防護。 這與程式碼無關。
將 /security-review 作為初步靜態審查,再進行 staging 動態測試、角色權限檢查、相關 SAST 與實際部署設定審查。本文未確立實測涵蓋百分比。
依系統風險與變更決定外部評估範圍及時機;單一指令或定期外部稽核都不能證明 100% 安全涵蓋。
原始資料的作者如何替 vibe 專案執行安全性審查
重點
我在自己的 TypeScript 專案上執行 /security-review,該專案使用 Next.js、Prisma、PostgreSQL 和 Redis。4 分鐘內,這個指令完成初步稽核,回報數項有充分依據、嚴重程度不一的發現;最後我花了一個半小時完成實際可用的修正。這比任何外部滲透測試都便宜且快速。
發現了什麼?這是一般 vibe 專案處於「已在正式環境運作,但尚未審查」階段時的典型情況:有幾項疑似問題與驗證流程、付款整合的 webhook 處理邏輯、檔案上傳處理有關,另外還有幾項關於呈現時 HTML 處理的具體提醒。我不會公開細節;有些建議已經套用,其他的仍在 PR 中。在這份專案回報中,初步掃描有用且快速;它不能證明稽核涵蓋比例或普遍完成時間。
我排除的誤報:
- 關於輸入驗證中的正規表示式造成 DoS 的發現 - 實際負載不會落在那些正規表示式上。
- 一項關於硬編碼 API 金鑰的發現 - 那是 fixture 中帶有明確
fake-前綴的測試金鑰。
花了多久?執行本身用了 4 分鐘。檢查報告花了 25 分鐘。包含測試在內,套用修正約花了一小時。從「開始」到「全部進入 main」總共約一個半小時。針對相同範圍進行外部滲透測試,需耗費一週的日曆時間,成本則高出數十倍。
主要收穫。/security-review 無法取代外部滲透測試,它可指出有用的程式碼問題,如作者回報的四分鐘掃描。請審查並測試修正,再另外確認執行行為與部署設定;掃描不會消除專案全部安全風險。
如何將 /security-review 整合到提交前的例行流程?
重點
重大變更提交前,在專案工作階段執行 /security-review,閱讀發現、修正已確認問題,再重跑相關測試。這是審查流程,不是阻止提交的技術限制。
先前以 git_commit、--severity HIGH 與 --fail-on-find 示範的 hook,不是有官方文件支持的可運作配方,不應作為安全閘門。本文未提供已驗證的本機提交阻擋 hook。上方官方 GitHub Action 提供自動 PR 發現;不能只因它在 PR 留言,就推論會阻擋提交或合併。
hook 的完整說明請參閱「Claude Code 中的 Hooks」指南。
另一種方式是使用 routines,建立一個 pre-deploy-check routine,用單一指令執行 /security-review + npm run build + npm run test。其他資料請參閱 Ailoot 文件。
如果你使用 MCP servers,可以將 /security-review 的發現整合至事件管理系統(Sentry、Linear、Notion),讓每項 HIGH 發現自動建立成 ticket。
/security-review 常見問題
重點
5 個常見問題:費用多少、多久執行一次、支援哪些技術堆疊、如果 Claude 已經找出這個漏洞該怎麼辦,以及能否只掃描特定檔案。簡短回答,不說廢話。
執行一次要花多少錢? 取決於專案大小。我的專案有 30K 行程式碼,執行一次約使用 $0.30-0.50 API 餘額。含有一百萬行程式碼的大型企業儲存庫,每次執行最多約需 $5-8。這比任何 SaaS 掃描器訂閱費便宜數十倍。
在本機應該多久執行一次? 最少在每次正式環境發布前執行。也可考慮在重大提交與 PR 前執行。本文未提供經驗證的自動提交阻擋 hook。
支援哪些技術堆疊? 任何 Claude 能閱讀的堆疊都可以。依照作者的觀察,已經檢查過的包括:Next.js / Node.js、Python(Django、FastAPI)、Go、Rust、PHP(Laravel)、Ruby on Rails。對非常冷門的語言(Erlang、Elixir、Clojure),品質會比較低,但仍會找到一些問題。
如果 Claude 每次都找出相同的「漏洞」,但它其實不是漏洞,該怎麼辦? 在 false-positive-filtering-instructions 中加入說明,解釋「為什麼這是安全的」。Claude 之後就不會再回報。
可以只掃描特定檔案嗎? 本機可以:只要執行 /security-review src/lib/auth/*.ts。在 GitHub Action 中,只會檢查目前 PR 的差異;這通常就是「特定檔案」所指的範圍。
來源
來源
- Anthropic - Claude Code Security 推出公告 - 2026 年 2 月 20 日發布的官方公告
- Anthropic Help Center - Claude Code 自動安全性審查 - 執行方式的官方說明
- GitHub: anthropics/claude-code-security-review - 含完整 README 的 GitHub Action 原始碼
- Claude Code Docs - 程式碼審查 - Anthropic 一般文件
- Anthropic Help Center - 使用 Claude Security - 相關產品
- Port - 匯入 Claude Code Security Reviews - 將結果整合至 Internal Developer Portal
- Claude Code Changelog - 指令發布紀錄
其他資料請參閱 Ailoot 文件。
更多詳情
常見問題:Claude Code 安全性審查:逐步指南與 2026 年 GitHub Action 自動化
安全審查報告沒有問題,就證明應用程式安全嗎?
不能。這只是初步程式碼審查,可能有漏報與過濾。請驗證修正,在 staging 測試角色與並行行為,並檢查實際部署設定。
本文 GitHub Action 會自動阻擋提交或合併嗎?
本文流程沒有證明這項保證。它會在 PR 發布發現,仍需審查及測試確認問題的修正;本文沒有提供已驗證的本機提交阻擋 hook。