部落格

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 會像人類安全研究員一樣閱讀並推理你的程式碼:理解各元件如何互動、追蹤資料在應用程式中的流動,並找出規則式工具會漏掉的複雜漏洞。

— Anthropic, https://www.anthropic.com/news/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. 儲存庫脈絡研究 - 讀取結構並識別技術堆疊、路由和資料庫查詢。
  2. 比較分析 - 將目前狀態與此技術堆疊常見的漏洞模式比較。
  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-prtrue是否在 PR 中張貼行內留言
upload-resultstrue是否將結果儲存為 artifact,保存 90 天
exclude-directories-以逗號分隔:tests/,docs/,fixtures/
claude-modelclaude-opus-4-1-20250805使用哪個模型
claudecode-timeout20逾時分鐘數
run-every-commitfalse是否在每次 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 的差異;這通常就是「特定檔案」所指的範圍。

來源

來源

其他資料請參閱 Ailoot 文件。

更多詳情

常見問題:Claude Code 安全性審查:逐步指南與 2026 年 GitHub Action 自動化

安全審查報告沒有問題,就證明應用程式安全嗎?

不能。這只是初步程式碼審查,可能有漏報與過濾。請驗證修正,在 staging 測試角色與並行行為,並檢查實際部署設定。

本文 GitHub Action 會自動阻擋提交或合併嗎?

本文流程沒有證明這項保證。它會在 PR 發布發現,仍需審查及測試確認問題的修正;本文沒有提供已驗證的本機提交阻擋 hook。

所有文章