# Owasp Zap

> 在已获授权的测试或预发布环境中，使用 OWASP ZAP 对有限范围的 HTTP API 做 OpenAPI 驱动的 DAST 检查：整理接口、建立鉴权上下文、执行 api/baseline/full 扫描、复打告警并输出带证据的判定报告。适用于 ZAP、API 安全扫描、DAST、 被动或主动 Web/API 风险检查；不适用于字段契约、业务联调、源码/依赖审计、 性能测试或生产扫描。

- Skill: `senshanshan/owasp-zap` (Agent Skill, multi-file: 16 files)
- Install (CLI): `npx skillmds@latest add senshanshan/owasp-zap`
- Raw SKILL.md: https://api.skillmd.com/api/skills/senshanshan/owasp-zap/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Security
- License: Apache-2.0
- Author: senshanshan (https://skillmd.com/u/senshanshan)
- Updated: 2026-09-22
- Page: https://skillmd.com/skills/senshanshan/owasp-zap

---


# OWASP ZAP 安全测试

这是一个面向 Codex 的 ZAP 编排 Skill。它负责把**明确授权的有限 API 范围**交给 ZAP 执行运行时安全检查，再用受控复打结果过滤误报。它不把 ZAP 原始告警直接当成漏洞结论。

公共工具分工见 [安全测试工具分工](../_shared/security-tool-boundaries.md)。这份入口只保留 ZAP 必须知道的规则。

## 适用范围

- 测试或预发布环境中的 HTTP API。
- 用户点名的模块、一个或多个 `METHOD + path`，或配置中的有限接口列表。
- 可用 OpenAPI 描述的 API 扫描，以及明确点名的 baseline/full 模式。
- 已配置的 token/header 或可配置登录请求。

不扩展到生产、整站自动发现、主机/DNS/云资产、浏览器 UI、源码扫描、依赖扫描、字段校验、业务联调或性能测试。

## 输入与输出

用户通常只需提供：

| 输入 | 用途 |
|---|---|
| 环境名 | 选择 `environments.<name>`，未提供时使用 `default_env` |
| 模块名或 `METHOD + path` | 限定 API 范围；没有明确范围时先从配置或源码识别，不猜测 |
| 扫描档位 | `api`、`baseline` 或本轮明确点名的 `full` |
| 写接口授权 | 允许将 POST/PUT/DELETE 等非安全方法加入扫描范围 |

执行产物：

- `zap/reports/last.html`、`last.json`：ZAP 原始报告，仅作核对材料。
- `zap/reports/last-summary.json`：压缩后的告警摘要。
- `zap/reports/last-recheck.json`：受控复打证据。
- `zap/reports/last-findings.html`：结合复打结果生成的最终判定报告。

## 公共配置契约

配置文件优先级：

1. 用户本轮点名的环境名。
2. 项目 `.codex/zap.config.yaml`。
3. 用户目录 `~/.codex/zap.config.yaml`。

配置文件包含以下公共概念：

- `environments.<name>.base_url`：测试环境地址。
- `environments.<name>.login`：公开包装脚本支持 `password` 或 `token`；其他登录方式需要项目侧扩展包装脚本。
- `auth.header`、`auth.scheme`：鉴权头和是否追加 `Bearer`。
- `auth.success`：项目业务成功契约，例如 HTTP 状态和 JSON 业务码。
- `safe_methods`、`allow_unsafe_methods`：默认只处理安全方法，写接口需要独立授权。
- `modules`、`path_examples`：接口范围和路径参数示例。
- `zap`：镜像、本机 ZAP、时长、告警级别和忽略项。

配置授权是本开源版的目标使用模型：用户应在本地配置中明确授权范围，并在高风险扫描前确认。当前包装脚本仍以现有配置字段和命令参数为准，尚未实现统一 `authorization` 字段的运行时强制校验；文档不把它描述成已经存在的代码门禁。

本 Skill 的公开登录契约只承诺 token/header 和可配置密码登录请求。发布包不包含任何项目专属短信、虚拟账号或测试钩子实现。

## 执行流程

1. 读取配置并确认环境、目标范围、鉴权方式和扫描档位。
2. 校验目标不是生产环境，且目标数量和方法符合配置及授权。
3. 将 `paths.json` 转成 `openapi.json`；路径参数使用配置示例，缺失时使用非业务占位值。
4. 登录并验证 `auth.success`；鉴权失败时停止，不匿名裸扫。
5. 执行 ZAP：
   - `api`：默认的 OpenAPI 驱动扫描。
   - `baseline`：用户明确点名时使用被动基线检查。
   - `full`：用户明确点名时使用更重的爬取和主动扫描，仍受方法和环境安全门约束。
6. 运行摘要脚本，再对命中 URL 做受控复打：
   - 带配置鉴权重新请求。
   - GET 额外做一次无鉴权请求，用于判断未授权读取。
   - 不原样重放 ZAP 的攻击载荷；POST/PUT 使用空对象，DELETE 不带请求体。
7. 按 [triage.md](triage.md) 对照业务成功契约判定真问题、假阳性和加固项。
8. 写出并打开 `zap/reports/last-findings.html`；对话只报告已被证据确认的问题。

## 安全硬约束

- 不修改产品源码，不向生产环境发起扫描。
- 不使用 `base_url` 代替有限目标列表，不擅自扩展模块范围。
- 未获得写接口授权时，默认只扫描 `safe_methods`。
- 不把密码、token、Cookie 值或完整攻击串写入 OpenAPI、报告、命令回显或聊天。
- ZAP Medium/High 只是线索；没有 `last-recheck.json` 证据，不得直接报告为真问题。
- 报告结论必须说明扫描范围、环境、档位、原始告警数量和复打证据，并注明不是上线放行证书。

## 与其他测试的边界

需要字段必填/类型/枚举验证时，使用 API 字段校验流程；需要多接口状态流、幂等或越权验证时，使用对应的业务/API 测试流程。需要源码、依赖、性能或浏览器覆盖时，选择对应的专用工具。

## 详细参考

- [config.md](config.md)：配置字段和登录契约。
- [defaults.md](defaults.md)：扫描档位默认值。
- [triage.md](triage.md)：复打证据和判定规则。
- [README.md](README.md)：复制、安装和产物速览。

