OWASP ZAP 安装与部署:桌面版、Docker 与 CI 集成
二、安装与部署:桌面版、Docker 与 CI 集成
ZAP 是 Java 应用,提供桌面版安装包、跨平台压缩包、以及官方 Docker 镜像。三种方式各有用途:桌面版适合手工探索,压缩包适合无头服务器,Docker 适合 CI 流水线。
- 确认 Java 环境。ZAP 对 Java 版本有最低要求,版本不符会直接启动失败:
java -version - 选择安装方式。桌面版从官方下载安装包即可;服务器上推荐用 Docker,环境干净且版本可控:
注意docker pull zaproxy/zap-stable docker run -u zap -p 8080:8080 -i zaproxy/zap-stable \ zap.sh -daemon -host 0.0.0.0 -port 8080 \ -config api.key=YOUR_API_KEYapi.key必须设置,否则任何人都能通过 API 控制你的扫描器。 - 安装并信任 CA 证书。和所有中间人代理一样,要抓 HTTPS 流量必须把 ZAP 的 CA 证书导入测试客户端。导出方式在
Tools → Options → Dynamic SSL Certificates下,导入到操作系统的受信任根证书区。测试结束后记得移除。 - 建立上下文并配置范围。在
Context中新建上下文,把授权范围内的域名加入 Include,把第三方资源加入 Exclude。这一步是合规的基础操作,不要跳过:Context: engagement-test-local Include: https://test\.example\.local/.* Exclude: https://.*\.cdn-provider\.com/.* Exclude: https://.*\.analytics-provider\.com/.* - 配置认证。如果目标需要登录,要在上下文中配置认证方式(表单认证、脚本认证、或者基于令牌的认证),并设置验证策略——让 ZAP 知道"什么情况下说明已登录"。没有配认证,扫描器只能看到未登录页面,覆盖度会非常低。
- 运行一次基线扫描验证流程。基线扫描只做被动检查,适合第一次运行时确认配置无误:
docker run -t zaproxy/zap-stable \ zap-baseline.py -t https://test.example.local \ -r baseline-report.html - 配置 CI 集成。在流水线中以无头方式运行,把报告作为构建产物保存,并设置阈值让高风险项导致构建失败,这样安全问题能在合并前被拦住。
常见问题与排查。
| 现象 | 根因 | 处理方式 |
|---|---|---|
| 启动报 Java 版本不满足 | Java 版本过低 | 安装符合要求版本并确认 java -version 输出正确 |
| HTTPS 站点大量证书错误 | CA 证书未导入 | 导出并导入受信任根证书 |
| 扫描结果几乎为空 | 未配置认证,或范围未包含目标路径 | 配置上下文认证与 Include 规则 |
| 动态页面扫描覆盖不全 | 只用传统 Spider | 改用 AJAX Spider 驱动浏览器爬取 |
| API 调用返回未授权 | 未带 API key | 请求参数中带上 apikey |
| 扫描时间过长 | 范围过大或主动扫描强度过高 | 收窄范围,按需选择扫描策略 |
| 目标出现性能下降 | 并发过高或主动扫描在业务高峰期运行 | 降低并发,调整到业务低峰期 |
| 报告出现大量误报 | 缺少业务上下文,扫描器按通用规则判断 | 人工复核逐条确认,不要直接照搬报告 |
可用的扫描脚本按用途区分:zap-baseline.py 只做被动扫描加轻量爬取,适合在每次提交时跑;zap-full-scan.py 会做完整的主动扫描,耗时与请求量都大得多,适合在发布前跑或按周期跑;zap-api-scan.py 针对 OpenAPI、GraphQL 等接口定义文件做扫描,适合前后端分离的项目,因为这类项目的接口无法靠爬虫自然发现。

