本教程面向中高级开发者,系统讲解如何利用 Claude Code 内置安全审查、社区安全 Skill 和自定义 Hooks 三层防护体系,对项目进行 OWASP Top 10 全覆盖扫描,并实现漏洞的自动化发现与修复。学完本教程,你将掌握从单文件快速审计到 CI/CD 持续安全门禁的完整链路。
适用人群:有 Claude Code 基础使用经验,希望将安全审计融入日常开发流程的后端/全栈开发者。
| 条件 | 说明 |
|---|---|
| Claude Code | 已安装 v1.0.20+ 版本(内置安全审查功能) |
| Node.js | v18+ 运行时环境 |
| Git | 版本控制,用于 PR 审查集成 |
GitHub CLI (gh) |
用于 PR 和 GitHub Actions 操作 |
| 基础安全知识 | 了解 OWASP Top 10 基本概念即可 |
# 验证环境
claude --version # 确认 >= 1.0.20
node --version # 确认 >= 18
gh --version # 确认已安装
Claude Code 的安全能力并非单一工具,而是三层递进体系:
graph TB
subgraph "Layer 1: 内置安全审查"
A[Native Security Review] --> A1[自动扫描代码变更]
A --> A2[检测常见漏洞模式]
A --> A3[生成修复建议]
end
subgraph "Layer 2: 安全 Skill 扩展"
B1[OWASP Security Skill]
B2[claude-cybersecurity]
B3[自定义安全规则]
B1 & B2 & B3 --> B[并行 Agent 深度扫描]
end
subgraph "Layer 3: 持续安全门禁"
C1[Pre-commit Hooks]
C2[GitHub Actions]
C3[PR 自动审查]
C1 & C2 & C3 --> C[CI/CD 安全流水线]
end
A --> B --> C
Layer 1 是 Claude Code 自 2026 年 2 月起内置的安全审查功能,基于 Anthropic 的 SAST(静态应用安全测试)引擎,无需任何配置即可使用。
Layer 2 通过社区安全 Skill 扩展审计范围,支持 OWASP Top 10:2025 全系列漏洞的深度扫描,包括 SQL 注入、XSS、CSRF、SSRF 等。
Layer 3 将安全审计嵌入 CI/CD 流水线,确保每次提交和 PR 都经过自动安全检查。
在项目根目录的 CLAUDE.md 中添加安全规则,是构建安全审计体系的第一步。这些规则会在每次会话启动时自动加载,指导 Claude Code 在编写和修改代码时遵循安全最佳实践。
# CLAUDE.md 安全规则示例
## 安全编码规范
### 禁止事项
- 禁止拼接 SQL 查询字符串,必须使用参数化查询
- 禁止将用户输入直接嵌入 HTML,必须经过转义
- 禁止在代码中硬编码密钥、令牌或凭证
- 禁止使用 eval()、exec() 等动态代码执行函数
- 禁止在日志中输出敏感信息(密码、token、PII)
### 强制要求
- 所有外部输入必须验证和清洗
- 所有 API 端点必须包含认证和授权检查
- 文件操作必须校验路径,防止目录遍历
- 密码必须使用 bcrypt/argon2 哈希存储
- 错误响应不得泄露内部实现细节
### 安全审查触发条件
当修改以下文件时,自动执行安全审查:
- 认证/授权相关代码
- 数据库查询逻辑
- 文件上传处理
- API 端点定义
- 配置文件变更
这段规则的核心价值在于 预防胜于修复。Claude Code 在编写代码时就会遵循这些约束,从源头减少漏洞引入。
对于大型项目,建议使用模块化规则:
.claude/
├── rules/
│ ├── security-injection.md # 注入类漏洞防护规则
│ ├── security-auth.md # 认证授权安全规则
│ ├── security-data.md # 数据保护规则
│ └── security-api.md # API 安全规则
└── CLAUDE.md # 主规则文件,通过 @rules/security-*.md 引用
Claude Code 自带安全审查能力,这是最快速的上手方式。
在 Claude Code 交互模式中,直接发出安全审查请求:
> 对整个 src/ 目录执行安全审查,重点检查 SQL 注入和 XSS 漏洞
Claude Code 会自动遍历目标目录,使用 Grep 搜索危险模式,逐文件分析并生成报告。
使用 /review 命令或直接请求 Claude Code 对特定 PR 进行安全审查:
# 方法一:在 Claude Code 中直接请求
> 审查 PR #42 的安全风险
# 方法二:使用 GitHub Actions 集成
gh pr view 42 --json files --jq '.files[].path' | \
xargs claude -p "对这些文件变更进行安全审查"
内置审查擅长检测: - 明显的注入漏洞模式 - 硬编码凭证 - 危险函数调用 - 基本的权限缺失
但对于以下场景需要 Layer 2 扩展: - 业务逻辑漏洞 - 复杂的认证绕过 - 多步骤攻击链 - 特定框架的安全配置问题
这是最全面的 OWASP 审计 Skill,覆盖 Top 10:2025 全部类别:
# 安装 OWASP Security Skill
claude skill add https://github.com/agamm/claude-code-owasp
安装后,该 Skill 会在 .claude/skills/ 目录下创建完整的安全审计规则集,包含:
- A01:2025 — Broken Access Control:权限绕过检测
- A02:2021 — Cryptographic Failures:弱加密检测
- A03:2021 — Injection:SQL/NoSQL/OS 命令注入检测
- A04:2021 — Insecure Design:设计缺陷识别
- A05:2021 — Security Misconfiguration:安全配置错误
- A06:2021 — Vulnerable Components:依赖漏洞检查
- A07:2021 — Auth Failures:认证和会话管理缺陷
- A08:2021 — Data Integrity Failures:数据完整性问题
- A09:2021 — Logging Failures:日志和监控不足
- A10:2021 — SSRF:服务端请求伪造检测
这个 Skill 的特色是使用 8 个并行 Agent 同时审计不同漏洞类别:
# 安装 claude-cybersecurity
claude skill add https://github.com/agricidaniel/claude-cybersecurity
其核心架构为:
graph LR
subgraph "8 个并行审计 Agent"
A1[Agent 1: SQL注入]
A2[Agent 2: XSS]
A3[Agent 3: 认证绕过]
A4[Agent 4: CSRF]
A5[Agent 5: SSRF]
A6[Agent 6: 敏感数据泄露]
A7[Agent 7: 配置错误]
A8[Agent 8: 依赖漏洞]
end
TARGET[目标代码库] --> A1 & A2 & A3 & A4 & A5 & A6 & A7 & A8
A1 & A2 & A3 & A4 & A5 & A6 & A7 & A8 --> REPORT[统一安全报告]
安装完成后,在 Claude Code 中触发审计:
> 使用 OWASP Security Skill 对 src/ 目录进行全面安全审计,按严重程度排序输出结果
预期输出示例:
## 安全审计报告
### 🔴 严重 (Critical) — 3 个
**[A03:Injection] SQL 注入风险 — src/api/users.ts:45**
```typescript
// 漏洞代码
const query = `SELECT * FROM users WHERE name = '${req.body.name}'`;
修复方案:使用参数化查询
const query = `SELECT * FROM users WHERE name = $1`;
const result = await pool.query(query, [req.body.name]);
[A02:Crypto] 弱密码哈希 — src/auth/hash.ts:12
// 漏洞代码
const hash = crypto.createHash('md5').update(password).digest('hex');
修复方案:使用 bcrypt
const hash = await bcrypt.hash(password, 12);
...
...
---
## 第五步:构建自动化安全修复流程
发现漏洞只是第一步,关键是建立高效的修复机制。
### 5.1 单漏洞快速修复
修复 src/api/users.ts 第 45 行的 SQL 注入漏洞,保持原有逻辑不变
Claude Code 会读取文件上下文,理解业务逻辑,生成安全的替代代码,并通过 Edit 工具直接修改文件。
### 5.2 批量安全修复工作流
对于多个同类漏洞,使用 `-p` 模式批量处理:
```bash
# 批量修复所有 SQL 注入
claude -p "扫描 src/ 目录下所有 .ts 文件,找出所有字符串拼接 SQL 查询的地方,改为参数化查询。每个文件修改前展示 diff,确认后再应用" --allowedTools "Edit,Read,Grep,Glob"
创建自定义安全修复 Skill,实现一键修复:
# .claude/skills/security-auto-fix.md
---
name: security-auto-fix
description: 自动发现并修复 OWASP Top 10 漏洞
---
## 执行步骤
1. **扫描阶段**:使用 Grep 搜索以下危险模式:
- SQL 字符串拼接: `.*\+.*SELECT|INSERT|UPDATE|DELETE.*`
- XSS 风险: `innerHTML|dangerouslySetInnerHTML|v-html`
- 硬编码密钥: `password\s*=\s*['"]|api_key\s*=\s*['"]|secret\s*=\s*['"]`
- 命令注入: `exec\(|eval\(|system\(|spawn\(`
2. **分析阶段**:对每个匹配结果分析上下文,判断是否为真实漏洞
3. **修复阶段**:生成安全替代代码,展示 diff 并应用
4. **验证阶段**:运行测试确认修复未破坏功能
使用方式:
> /security-auto-fix 扫描并修复 src/ 目录下的所有安全漏洞
Hooks 是 Claude Code 的事件驱动机制,可以在文件修改时自动触发安全检查。
// .claude/settings.json
{
"hooks": {
"PostToolUse": [
{
"matcher": "Edit|Write",
"command": "claude -p \"检查刚修改的文件 $CLAUDE_FILE_PATH 是否引入了安全漏洞,包括 SQL 注入、XSS、硬编码凭证。只报告问题,不修改代码\" --model claude-haiku-4-5-20251001 2>/dev/null || true"
}
]
}
}
这个 Hook 的工作原理: - 触发时机:每次使用 Edit 或 Write 工具修改文件后 - 执行逻辑:调用 Haiku 模型(快速且低成本)对修改后的文件进行安全快扫 - 输出方式:仅在发现问题时输出警告
{
"hooks": {
"PreToolUse": [
{
"matcher": "Bash",
"command": "if echo \"$TOOL_INPUT\" | grep -q 'git commit'; then claude -p \"检查 git diff --cached 的输出,确认没有引入安全问题。如有问题输出 BLOCK: 原因\" --model claude-haiku-4-5-20251001 2>/dev/null; fi"
}
]
}
}
防止意外提交敏感文件:
{
"hooks": {
"PreToolUse": [
{
"matcher": "Edit|Write",
"command": "file=\"$TOOL_INPUT\"; if echo \"$file\" | grep -qiE '(\\.env|credentials|secret|\\.pem|\\.key)'; then echo 'BLOCK: 正在修改可能的敏感文件,请确认'; exit 1; fi"
}
]
}
}
Anthropic 官方提供了 claude-code-security-review GitHub Action:
# .github/workflows/security-review.yml
name: Security Review
on:
pull_request:
types: [opened, synchronize]
jobs:
security-scan:
runs-on: ubuntu-latest
permissions:
pull-requests: write
contents: read
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Claude Code Security Review
uses: anthropics/claude-code-security-review@v1
with:
claude-api-key: ${{ secrets.CLAUDE_API_KEY }}
severity-threshold: medium # 只报告中等及以上
categories: |
injection
xss
auth
crypto
misconfig
sensitive-data
该 Action 会自动: 1. 分析 PR 的所有文件变更 2. 识别安全漏洞 3. 在 PR 中发布内联评论 4. 根据严重程度设置检查状态
对于更细粒度的控制,可以构建自定义流水线:
# .github/workflows/custom-security.yml
name: Custom Security Pipeline
on:
pull_request:
push:
branches: [main]
jobs:
security-audit:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install Claude Code
run: npm install -g @anthropic-ai/claude-code
- name: OWASP Full Scan
env:
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
run: |
claude -p "
对以下目录执行完整 OWASP 安全审计:
- src/api/ — 检查注入、认证、授权
- src/db/ — 检查 SQL 注入、数据泄露
- src/config/ — 检查硬编码凭证、安全配置
- src/middleware/ — 检查 CSRF、CORS、安全头
输出格式:JSON,包含漏洞位置、类别、严重程度、修复建议
" --output-format json > security-report.json
- name: Upload Report
uses: actions/upload-artifact@v4
with:
name: security-report
path: security-report.json
- name: Check Threshold
run: |
critical=$(jq '[.[] | select(.severity == "critical")] | length' security-report.json)
if [ "$critical" -gt 0 ]; then
echo "::error::发现 $critical 个严重漏洞"
exit 1
fi
让我们用一个完整案例串联前面所有步骤。假设有一个 Express.js 后端项目需要安全审计。
express-app/
├── src/
│ ├── api/
│ │ ├── users.ts # 用户 API
│ │ ├── products.ts # 产品 API
│ │ └── auth.ts # 认证 API
│ ├── db/
│ │ └── connection.ts # 数据库连接
│ ├── middleware/
│ │ └── auth.ts # 认证中间件
│ └── app.ts # 应用入口
├── package.json
└── .env # ⚠️ 包含数据库密码
cd express-app
claude
在会话中确认安全规则已加载:
> 列出当前项目的安全规则配置
> 使用以下策略对 src/ 目录进行安全审计:
> 1. 检查所有 .ts 文件中的 SQL 注入风险
> 2. 检查认证和授权逻辑缺陷
> 3. 检查敏感数据泄露风险
> 4. 检查硬编码凭证
> 5. 检查安全配置错误
> 按严重程度从高到低排序输出,每个漏洞给出具体代码位置和修复代码
Claude Code 会发现类似以下问题并逐一修复:
问题 1:SQL 注入 — src/api/users.ts
// ❌ 漏洞代码
app.get('/api/users/search', async (req, res) => {
const name = req.query.name;
const result = await db.query(
`SELECT * FROM users WHERE name LIKE '%${name}%'`
);
res.json(result.rows);
});
// ✅ 修复后
app.get('/api/users/search', async (req, res) => {
const name = req.query.name as string;
const result = await db.query(
'SELECT id, name, email FROM users WHERE name LIKE $1',
[`%${name}%`]
);
res.json(result.rows);
});
问题 2:弱密码哈希 — src/api/auth.ts
// ❌ 漏洞代码
const crypto = require('crypto');
const hash = crypto.createHash('sha256').update(password).digest('hex');
// ✅ 修复后
import bcrypt from 'bcrypt';
const hash = await bcrypt.hash(password, 12);
问题 3:敏感文件暴露 — .env
# ❌ .env 被 git 跟踪
DB_PASSWORD=mysecretpassword123
# 修复:将 .env 加入 .gitignore,使用环境变量管理
echo ".env" >> .gitignore
> 运行项目测试套件,确保安全修复没有破坏现有功能
npm test
> 创建一个安全修复分支,提交所有安全修复,并创建 PR
Claude Code 会自动:
1. 创建 security-fix/initial-audit 分支
2. 暂存并提交修改
3. 使用 gh pr create 创建 PR,附带详细的修复说明
flowchart TD
START[开始安全审计] --> CONFIG[配置 CLAUDE.md 安全规则]
CONFIG --> INSTALL[安装安全 Skill]
INSTALL --> SCAN{选择扫描方式}
SCAN -->|快速扫描| NATIVE[内置安全审查]
SCAN -->|深度扫描| OWASP[OWASP Skill 全量扫描]
SCAN -->|并行扫描| CYBER[claude-cybersecurity 8 Agent]
NATIVE --> REPORT[生成安全报告]
OWASP --> REPORT
CYBER --> REPORT
REPORT --> CLASSIFY{漏洞分类}
CLASSIFY -->|严重| CRITICAL[立即修复]
CLASSIFY -->|中等| MEDIUM[计划修复]
CLASSIFY -->|低风险| LOW[记录跟踪]
CRITICAL --> FIX[自动/手动修复]
MEDIUM --> FIX
FIX --> TEST[运行测试验证]
TEST -->|通过| COMMIT[提交安全修复]
TEST -->|失败| FIX
COMMIT --> PR[创建 PR]
PR --> CI[CI/CD 安全门禁]
CI -->|通过| MERGE[合并代码]
CI -->|未通过| FIX
LOW --> TRACK[记录到安全跟踪系统]
MERGE --> HOOKS[Hooks 持续监控]
TRACK --> HOOKS
HOOKS --> |下次修改| NATIVE
不同模型在安全审计中有不同优势:
> 使用 Opus 进行深度安全架构分析,识别设计层面的安全缺陷。
> 然后使用 Sonnet 对具体代码实现进行 OWASP 合规检查。
> 最后使用 Haiku 对所有修复进行回归测试。
这种分层策略在保证审计质量的同时控制了成本。
在 .claude/rules/ 中创建安全审计模板,实现标准化审计流程:
<!-- .claude/rules/security-audit-template.md -->
## 安全审计标准流程
### 阶段一:信息收集
1. 确定技术栈和框架
2. 识别认证/授权机制
3. 映射数据流和信任边界
4. 列出外部依赖
### 阶段二:漏洞扫描
1. OWASP Top 10 逐项检查
2. 框架特定安全配置审查
3. 依赖漏洞检查(npm audit / pip audit)
4. 敏感数据泄露扫描
### 阶段三:报告输出
- 格式:漏洞位置 | 类别 | 严重程度 | 修复建议 | 修复代码
- 按严重程度排序
- 包含修复优先级建议
对于需要满足合规要求(如 SOC 2、ISO 27001)的项目:
> 基于 OWASP ASVS 5.0 Level 1 要求,对本项目执行安全合规审计。
> 逐项检查 ASVS 验证要求,标记合规/不合规/不适用。
> 对不合规项生成修复方案。
只审计代码变更,适合大型项目快速迭代:
# 审计最近一次提交的变更
claude -p "审查 git diff HEAD~1 的输出,检查是否引入了安全漏洞"
方案:缩小扫描范围,使用 Haiku 模型加速。
> 只扫描 src/api/ 目录下的认证和授权相关代码,使用 Haiku 模型提高速度
在 Task 工具中指定 model: "haiku" 也可加速子任务。
方案:在 CLAUDE.md 中添加误报过滤规则。
## 安全审计排除规则
- 忽略 test/ 目录中的硬编码凭证(仅用于测试环境)
- 忽略 src/utils/mock.ts 中的模拟数据
- 忽略依赖项的间接漏洞(通过 npm audit 处理)
方案:分批修复,优先处理关键路径。
> 我的项目有大量安全漏洞。请帮我制定分阶段修复计划:
> 1. 首先识别涉及用户认证和数据保护的最高风险漏洞
> 2. 制定4周修复计划,每周修复一类漏洞
> 3. 每次修复后运行完整测试套件
方案:将 Claude Code Hooks 作为补充层,不替代已有的 pre-commit 配置。
{
"hooks": {
"PostToolUse": [{
"matcher": "Edit|Write",
"command": "npx pre-commit run --files $CLAUDE_FILE_PATH 2>/dev/null || true"
}]
}
}
| 资源 | 说明 |
|---|---|
| Anthropic 官方安全审查文档 | Claude Code 内置代码审查和安全审查官方指南 |
| OWASP Top 10:2025 官方文档 | 最新的 Web 应用十大安全风险标准 |
| claude-code-security-review GitHub Action | Anthropic 官方的 CI/CD 安全审查 Action |
| OWASP ASVS 5.0 | 应用安全验证标准,用于合规审计 |
| Claude Secure Coding Rules | 社区维护的 Claude Code 安全编码规则集 |
| 维度 | 评估 |
|---|---|
| 适合训练营类型 | 企业安全训练营、DevSecOps 工程师培训、全栈开发者进阶营 |
| 预计教学时长 | 4-6 小时(含实操演练) |
| 学员基础要求 | 有 Claude Code 基础使用经验,了解 Web 开发基本概念 |
| 实操占比 | 70% 实操 + 30% 理论 |
| 考核方式 | 对给定含漏洞项目执行完整安全审计,输出报告并修复所有严重漏洞 |
| 分组建议 | 2-3 人一组,每组审计不同类型的项目(Express/Django/Spring) |
[!tip] 51学通信知识星球 星主:爱卫生(微信:gprshome201101)——公众号「51学通信」创办者,19 年通信行业运维与讲师经验,著有《GPRS网络信令实例详解》《EPC原理与实践》《5G核心网原理与实践》三本纸质书(各大电商平台有售)。 星球定位:深耕 5G 核心网、IMS、NFV/AI、云原生等 ICT 领域,主打运维岗位与信令分析。 当前规模:5200 篇主题 / 990 个回答,198 元/年。 加入福利:加入星球后请加爱卫生微信,拉您进知识星球年度陪伴与答疑群——不限量回复您的各种问题,另有群内分享。 AI 加持:51学通信知识星球已作为 skill 接入 WorkBuddy,使用 deepseek-4-flash 在海量星球帖子中精准找贴、找视频、找 FAQ 和案例,做总结、找文档和 PPT 等场景全覆盖。
