OWASP ZAP 安全测试
这是一个面向 Codex 的 ZAP 编排 Skill。它负责把明确授权的有限 API 范围交给 ZAP 执行运行时安全检查,再用受控复打结果过滤误报。它不把 ZAP 原始告警直接当成漏洞结论。
公共工具分工见 安全测试工具分工。这份入口只保留 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:结合复打结果生成的最终判定报告。
公共配置契约
配置文件优先级:
- 用户本轮点名的环境名。
- 项目
.codex/zap.config.yaml。 - 用户目录
~/.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 和可配置密码登录请求。发布包不包含任何项目专属短信、虚拟账号或测试钩子实现。
执行流程
- 读取配置并确认环境、目标范围、鉴权方式和扫描档位。
- 校验目标不是生产环境,且目标数量和方法符合配置及授权。
- 将
paths.json转成openapi.json;路径参数使用配置示例,缺失时使用非业务占位值。 - 登录并验证
auth.success;鉴权失败时停止,不匿名裸扫。 - 执行 ZAP:
api:默认的 OpenAPI 驱动扫描。baseline:用户明确点名时使用被动基线检查。full:用户明确点名时使用更重的爬取和主动扫描,仍受方法和环境安全门约束。
- 运行摘要脚本,再对命中 URL 做受控复打:
- 带配置鉴权重新请求。
- GET 额外做一次无鉴权请求,用于判断未授权读取。
- 不原样重放 ZAP 的攻击载荷;POST/PUT 使用空对象,DELETE 不带请求体。
- 按 triage.md 对照业务成功契约判定真问题、假阳性和加固项。
- 写出并打开
zap/reports/last-findings.html;对话只报告已被证据确认的问题。
安全硬约束
- 不修改产品源码,不向生产环境发起扫描。
- 不使用
base_url代替有限目标列表,不擅自扩展模块范围。 - 未获得写接口授权时,默认只扫描
safe_methods。 - 不把密码、token、Cookie 值或完整攻击串写入 OpenAPI、报告、命令回显或聊天。
- ZAP Medium/High 只是线索;没有
last-recheck.json证据,不得直接报告为真问题。 - 报告结论必须说明扫描范围、环境、档位、原始告警数量和复打证据,并注明不是上线放行证书。
与其他测试的边界
需要字段必填/类型/枚举验证时,使用 API 字段校验流程;需要多接口状态流、幂等或越权验证时,使用对应的业务/API 测试流程。需要源码、依赖、性能或浏览器覆盖时,选择对应的专用工具。
详细参考
- config.md:配置字段和登录契约。
- defaults.md:扫描档位默认值。
- triage.md:复打证据和判定规则。
- README.md:复制、安装和产物速览。