# Claude Code 安全性審查：逐步指南與 2026 年 GitHub Action 自動化

> 如何使用 Claude Code 中的 /security-review 檢查 vibe 專案的安全性。包含設定步驟、GitHub Action 範本、6 種漏洞，以及坦誠說明的限制。

Source: https://ailoot.ai/blog/zh-hant-tw/claude-code-security-review/
Canonical: https://ailoot.ai/blog/zh-hant-tw/claude-code-security-review/
Language: zh-Hant-TW
Publisher: Ailoot (https://ailoot.ai/)
Translation: guide-212
Revision: sha256-a8f71c53d333252de82d33b6103e73b735cba752783551bd18d2534440fb598b


原始資料的作者描述了自己的經驗：「我剛在自己的 vibe 專案上執行 security-review，團隊在 4 分鐘內就找出幾個真實問題，而且都已經修好了。」這項工作過去得花一整天請外部顧問處理。

工具設定的其他資料請參閱 [Ailoot 文件](https://ailoot.ai/docs/)。

<div class="aside" data-semantic="ailoot-cta" role="note" aria-label="Ailoot Guides">

[Ailoot Guides](https://ailoot.ai/docs/)

</div>

## Claude Code 中的 /security-review 是什麼？

<div class="aside" data-semantic="key-takeaway" role="note" aria-label="本節重點">

重點

`/security-review` 是 Claude Code 內建的指令，可直接從終端機對整個專案或目前的變更進行安全性分析。Anthropic 在 2026 年 2 月 20 日將它納入 Claude Code Security 推出，並開放給所有 Pro、Max 和 API Console 使用者。費用會從一般 Claude API 餘額中扣除。

</div>

這個指令有兩種執行模式。本機模式：在終端機執行 `/security-review`，Claude 會讀取儲存庫並產生報告。伺服器端模式：將相同引擎設定為 GitHub Action，讓它在每個 Pull Request 上自動留下行內留言。

與傳統 SAST 掃描器（Snyk Code、Semgrep、SonarQube）不同，`/security-review` 不依循固定規則。它像現場工程師一樣閱讀程式碼：追蹤資料流、理解你使用的框架和信任邊界的位置，並找出規則未描述的漏洞。

<figure>
<blockquote>
<p>Claude Code Security 會像人類安全研究員一樣閱讀並推理你的程式碼：理解各元件如何互動、追蹤資料在應用程式中的流動，並找出規則式工具會漏掉的複雜漏洞。</p>
</blockquote>
<figcaption>— Anthropic, https://www.anthropic.com/news/claude-code-security</figcaption>
</figure>

這不代表 `/security-review` 可以取代外部滲透測試或在預備環境進行的實際測試。它可自動完成部分初步程式碼審查，但本文沒有測量任何稽核涵蓋比例。以下將說明如何正確執行，以及 Claude 會在你的專案中找出什麼。

## 如何用 5 個步驟執行 /security-review？

<div class="aside" data-semantic="key-takeaway" role="note" aria-label="本節重點">

重點

將 Claude Code 更新至最新版本，在終端機開啟專案，執行 `/security-review`，等待報告（一般專案約需 1 到 5 分鐘），閱讀嚴重性判定，再請 Claude 套用修正。這個指令適用於任何技術堆疊：Next.js、Django、FastAPI、Rails、Go、Rust。無須特別設定。

</div>

**步驟 1. 更新 Claude Code。** 此指令從 2026 年 2 月 20 日發布的版本起即可使用。

```bash
claude update
```

如果你透過 npm 安裝 Claude Code，也可以執行：

```bash
npm install -g @anthropic-ai/claude-code@latest
```

確認 `/security-review` 已出現在指令清單中：

```bash
claude /help | grep security
```

**步驟 2. 開啟專案並登入 Claude Code。**

```bash
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 小時。

<div class="aside" data-semantic="ailoot-cta" role="note" aria-label="Ailoot Guides">

[Ailoot Guides](https://ailoot.ai/docs/)

</div>

## /security-review 會找出哪些漏洞？

<div class="aside" data-semantic="key-takeaway" role="note" aria-label="本節重點">

重點

Claude 能找出 6 類問題：SQL 注入及一般注入、XSS、驗證與授權問題、敏感資料外洩、第三方相依套件的漏洞，以及程式碼中硬編碼的機密。這個指令也能處理分散在多個檔案中的驗證邏輯，規則式掃描器做不到這點。

</div>

預設分析內容的完整清單列於 [Anthropic 官方文件](https://support.claude.com/en/articles/11932705-automated-security-reviews-in-claude-code)：

| 類別 | 檢查項目 |
|----|----|
| **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 進行自動審查？

<div class="aside" data-semantic="key-takeaway" role="note" aria-label="本節重點">

重點

Anthropic 發布了官方 Action：`anthropics/claude-code-security-review@main`。只要加入一個 workflow 檔案就能連接，並在每個 Pull Request 上自動留下行內留言，指出找到的漏洞。請設定 `CLAUDE_API_KEY` 與 workflow 權限。官方 Action 提醒它未針對提示注入強化，應審查可信任 PR；啟用前先檢查協作者與 workflow 存取權。

</div>

**步驟 1. 取得 API 金鑰。** 前往 [console.anthropic.com](https://console.anthropic.com/)，建立 API 金鑰並複製。

**步驟 2. 將金鑰加入儲存庫機密。** 在 GitHub 中，前往 Settings → Secrets and variables → Actions → New repository secret。名稱設為 `CLAUDE_API_KEY`，值填入你的金鑰。

**步驟 3. 建立 workflow 檔案。** 將檔案存為 `.github/workflows/security.yml`：

```yaml
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`。

## 如何過濾誤報並調整敏感度？

<div class="aside" data-semantic="key-takeaway" role="note" aria-label="本節重點">

重點

此 Action 有 9 個輸入項目，可用來設定專案行為。主要項目包括：`exclude-directories`（例如 `tests/,fixtures/`）、`false-positive-filtering-instructions`（存放「這不是漏洞，因為……」等規則的 md 檔案路徑），以及用於額外領域特定檢查的 `custom-security-scan-instructions`。

</div>

GitHub Action 輸入項目的完整表格（[來源：儲存庫 README](https://github.com/anthropics/claude-code-security-review)）：

| 輸入項目 | 預設值 | 功能 |
|----|----|----|
| `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` 檔案：

```markdown
# 本專案的誤判過濾規則

- `src/lib/email/layout.ts` 中的任何 `dangerouslySetInnerHTML` 都是安全的——
  HTML 是由可信任的範本組成，並在寫入資料庫時透過 `sanitize-html` 處理，
  而不是在呈現時處理。
- 不要回報 `__tests__/fixtures/*.ts` 中硬編碼的測試 API 金鑰。
  所有金鑰都以 `sk-test-fake-` 開頭。
- `src/lib/admin/migrations.ts` 中的 SQL 串接是可接受的——該檔案只會以 root 身分執行，
  且輸入資料來自環境變數。
```

在 workflow 中指定該檔案：

```yaml
- 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
```

**自訂安全性掃描指示**的設定方式類似。建立一個檔案，加入對你的專案特別重要的規則：

```markdown
# 本專案的其他檢查項目

- `/api/admin/*` 底下的所有端點都必須透過共用包裝器檢查管理員角色。
  若沒有這個包裝器，嚴重性為 HIGH。
- 所有 YooKassa / CloudPayments webhook 都必須在解析本文前驗證簽章。
  若未驗證，嚴重性為 HIGH。
- Magic-link 權杖必須只能使用一次（第一次有效請求後標記為已使用）。
  可重複使用的權杖嚴重性為 MEDIUM。
```

這已經不是 Anthropic 預設範本，而是將你對專案的專業知識轉化為 Claude 每次都會套用的規則。這就是「方法論勝過模型」的核心。

若想進一步了解 Claude 的脈絡方法，請參閱指南：[「如何設定 CLAUDE.md」](https://ailoot.ai/blog/zh-hant-tw/claude-md-template/)與[「Claude Code 中的 Second Brain」](https://ailoot.ai/blog/zh-hant-tw/claude-code-second-brain/)。

## Claude 沒有找出什麼？為什麼？坦誠說明其限制

<div class="aside" data-semantic="key-takeaway" role="note" aria-label="本節重點">

重點

程式碼審查本身不會測試執行中的應用程式或驗證部署環境。它可能指出程式中潛在競爭條件、業務邏輯或設定問題，但仍需 staging 測試與實際部署檢查來確認行為和剩餘風險。

</div>

Anthropic 清楚列出預設停用的項目及原因（[來源：儲存庫 README](https://github.com/anthropics/claude-code-security-review)）：

- **阻斷服務** - 雜訊太多，而且影響幾乎總是很低。
- **速率限制疑慮** - 在基礎架構層處理，而非在程式碼中處理。
- **記憶體／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 專案執行安全性審查

<div class="aside" data-semantic="key-takeaway" role="note" aria-label="本節重點">

重點

我在自己的 TypeScript 專案上執行 `/security-review`，該專案使用 Next.js、Prisma、PostgreSQL 和 Redis。4 分鐘內，這個指令完成初步稽核，回報數項有充分依據、嚴重程度不一的發現；最後我花了一個半小時完成實際可用的修正。這比任何外部滲透測試都便宜且快速。

</div>

發現了什麼？這是一般 vibe 專案處於「已在正式環境運作，但尚未審查」階段時的典型情況：有幾項疑似問題與驗證流程、付款整合的 webhook 處理邏輯、檔案上傳處理有關，另外還有幾項關於呈現時 HTML 處理的具體提醒。我不會公開細節；有些建議已經套用，其他的仍在 PR 中。在這份專案回報中，初步掃描有用且快速；它不能證明稽核涵蓋比例或普遍完成時間。

我排除的誤報：

- 關於輸入驗證中的正規表示式造成 DoS 的發現 - 實際負載不會落在那些正規表示式上。
- 一項關於硬編碼 API 金鑰的發現 - 那是 fixture 中帶有明確 `fake-` 前綴的測試金鑰。

花了多久？執行本身用了 4 分鐘。檢查報告花了 25 分鐘。包含測試在內，套用修正約花了一小時。從「開始」到「全部進入 main」總共約一個半小時。針對相同範圍進行外部滲透測試，需耗費一週的日曆時間，成本則高出數十倍。

主要收穫。`/security-review` 無法取代外部滲透測試，它可指出有用的程式碼問題，如作者回報的四分鐘掃描。請審查並測試修正，再另外確認執行行為與部署設定；掃描不會消除專案全部安全風險。

## 如何將 /security-review 整合到提交前的例行流程？

<div class="aside" data-semantic="key-takeaway" role="note" aria-label="本節重點">

重點

重大變更提交前，在專案工作階段執行 `/security-review`，閱讀發現、修正已確認問題，再重跑相關測試。這是審查流程，不是阻止提交的技術限制。

</div>

先前以 `git_commit`、`--severity HIGH` 與 `--fail-on-find` 示範的 hook，不是有官方文件支持的可運作配方，不應作為安全閘門。本文未提供已驗證的本機提交阻擋 hook。上方官方 GitHub Action 提供自動 PR 發現；不能只因它在 PR 留言，就推論會阻擋提交或合併。

hook 的完整說明請參閱[「Claude Code 中的 Hooks」](https://ailoot.ai/blog/zh-hant-tw/claude-code-hooks/)指南。

另一種方式是使用 [routines](https://ailoot.ai/blog/zh-hant-tw/claude-code-routines/)，建立一個 `pre-deploy-check` routine，用單一指令執行 `/security-review` + `npm run build` + `npm run test`。其他資料請參閱 Ailoot 文件。

如果你使用 [MCP servers](https://ailoot.ai/blog/zh-hant-tw/mcp-servers-claude-code/)，可以將 `/security-review` 的發現整合至事件管理系統（Sentry、Linear、Notion），讓每項 HIGH 發現自動建立成 ticket。

## /security-review 常見問題

<div class="aside" data-semantic="key-takeaway" role="note" aria-label="本節重點">

重點

5 個常見問題：費用多少、多久執行一次、支援哪些技術堆疊、如果 Claude 已經找出這個漏洞該怎麼辦，以及能否只掃描特定檔案。簡短回答，不說廢話。

</div>

**執行一次要花多少錢？** 取決於專案大小。我的專案有 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 的差異；這通常就是「特定檔案」所指的範圍。

## 來源

<div class="section" role="doc-bibliography" aria-label="來源">

### 來源

- [Anthropic - Claude Code Security 推出公告](https://www.anthropic.com/news/claude-code-security) - 2026 年 2 月 20 日發布的官方公告
- [Anthropic Help Center - Claude Code 自動安全性審查](https://support.claude.com/en/articles/11932705-automated-security-reviews-in-claude-code) - 執行方式的官方說明
- [GitHub: anthropics/claude-code-security-review](https://github.com/anthropics/claude-code-security-review) - 含完整 README 的 GitHub Action 原始碼
- [Claude Code Docs - 程式碼審查](https://code.claude.com/docs/en/code-review) - Anthropic 一般文件
- [Anthropic Help Center - 使用 Claude Security](https://support.claude.com/en/articles/14661296-use-claude-security) - 相關產品
- [Port - 匯入 Claude Code Security Reviews](https://docs.port.io/guides/all/ingest-claude-code-security-reviews/) - 將結果整合至 Internal Developer Portal
- [Claude Code Changelog](https://code.claude.com/docs/en/changelog) - 指令發布紀錄

</div>

其他資料請參閱 [Ailoot 文件](https://ailoot.ai/docs/)。



<div class="aside" data-semantic="ailoot-cta" role="note" aria-label="Ailoot Guides">

[Ailoot Guides](https://ailoot.ai/docs/)

</div>

<div class="aside" data-semantic="ailoot-cta" role="note" aria-label="前往 Ailoot">

[前往 Ailoot](https://ailoot.ai/)

</div>

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

### 安全審查報告沒有問題，就證明應用程式安全嗎？

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

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

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


## Ailoot · 公司及其專案組合

Ailoot以累積的營運經驗、廣大的客戶群、穩定的服務及持續的KPI管理為基礎。

公司及其專案組合：數百萬客戶，每月銷售額達數十億。

Ailoot將這些營運經驗用於API存取，讓客戶的產品、代理、應用程式及自動化流程使用AI功能。
