OWASP ZAP Web 安全测试教程
OWASP ZAP(Zed Attack Proxy)是全球最流行的开源 Web 安全测试工具,由 OWASP 基金会维护。它可以自动发现 Web 应用中的 SQL 注入、XSS、CSRF 等常见安全漏洞,同时也支持手动渗透测试。本文将介绍如何在搬瓦工 VPS 上通过命令行和 Docker 方式使用 ZAP 进行 Web 安全测试。
一、ZAP 核心功能
- 被动扫描:在不发送额外请求的情况下,分析经过代理的流量中的安全问题。
- 主动扫描:主动向目标发送各种攻击载荷,检测 SQL 注入、XSS 等漏洞。
- 爬虫:自动爬取网站页面,发现所有可访问的 URL。
- Ajax 爬虫:使用浏览器引擎爬取 JavaScript 渲染的页面。
- Fuzzer:对参数进行模糊测试。
- API 支持:提供 REST API,支持自动化集成。
二、Docker 部署
在搬瓦工 VPS 上推荐使用 Docker 方式运行 ZAP,无需安装 Java 环境。Docker 安装请参考Docker 安装教程。
2.1 拉取镜像
docker pull ghcr.io/zaproxy/zaproxy:stable
2.2 基线扫描
基线扫描是最快的扫描模式,只运行被动扫描规则:
docker run -t ghcr.io/zaproxy/zaproxy:stable zap-baseline.py \
-t https://example.com \
-r baseline-report.html
2.3 全面扫描
全面扫描包含爬虫和主动扫描,耗时较长但检测更全面:
docker run -t ghcr.io/zaproxy/zaproxy:stable zap-full-scan.py \
-t https://example.com \
-r full-report.html
2.4 API 扫描
针对 API 接口的扫描,支持 OpenAPI/Swagger 规范:
docker run -t ghcr.io/zaproxy/zaproxy:stable zap-api-scan.py \
-t https://example.com/api/openapi.json \
-f openapi \
-r api-report.html
三、保存扫描报告
# 创建报告目录
mkdir -p /opt/zap-reports
# 运行扫描并保存报告到主机
docker run -v /opt/zap-reports:/zap/wrk:rw \
-t ghcr.io/zaproxy/zaproxy:stable zap-baseline.py \
-t https://example.com \
-r report.html \
-J report.json \
-x report.xml
四、ZAP Daemon 模式
以守护进程模式运行 ZAP,提供 API 接口供其他工具调用:
# 启动 ZAP 守护进程
docker run -d --name zap \
-p 8080:8080 \
ghcr.io/zaproxy/zaproxy:stable \
zap.sh -daemon -host 0.0.0.0 -port 8080 \
-config api.key=your-api-key \
-config api.addrs.addr.name=.* \
-config api.addrs.addr.regex=true
4.1 使用 API 控制扫描
# 启动爬虫
curl "http://localhost:8080/JSON/spider/action/scan/?apikey=your-api-key&url=https://example.com"
# 查看爬虫进度
curl "http://localhost:8080/JSON/spider/view/status/?apikey=your-api-key"
# 启动主动扫描
curl "http://localhost:8080/JSON/ascan/action/scan/?apikey=your-api-key&url=https://example.com"
# 查看扫描进度
curl "http://localhost:8080/JSON/ascan/view/status/?apikey=your-api-key"
# 获取告警
curl "http://localhost:8080/JSON/core/view/alerts/?apikey=your-api-key"
五、自定义扫描策略
创建扫描规则配置文件来控制扫描行为:
cat > /opt/zap-rules.conf << 'EOF'
# 规则 ID 和动作(IGNORE, WARN, FAIL)
10016 IGNORE
10017 IGNORE
10021 WARN
10038 WARN
10049 WARN
40012 FAIL
40014 FAIL
40016 FAIL
40018 FAIL
90022 FAIL
EOF
docker run -v /opt:/zap/wrk:rw \
-t ghcr.io/zaproxy/zaproxy:stable zap-baseline.py \
-t https://example.com \
-c zap-rules.conf \
-r report.html
六、扫描认证后的页面
对于需要登录的 Web 应用,可以通过上下文文件配置认证:
cat > /opt/zap-context.xml << 'CONTEXT'
Authenticated Context
https://example.com.*
2
Logout
Login
testuser:testpassword
CONTEXT
七、CI/CD 集成
ZAP 可以集成到持续集成流程中,在每次部署后自动进行安全检测:
#!/bin/bash
# CI/CD 安全扫描脚本
TARGET_URL="https://staging.example.com"
REPORT_DIR="/opt/zap-reports/$(date +%Y%m%d)"
mkdir -p "$REPORT_DIR"
# 运行基线扫描
docker run --rm \
-v "$REPORT_DIR":/zap/wrk:rw \
ghcr.io/zaproxy/zaproxy:stable zap-baseline.py \
-t "$TARGET_URL" \
-r report.html \
-J report.json \
-I
EXIT_CODE=$?
if [ $EXIT_CODE -ne 0 ]; then
echo "Security scan found issues! Check report at: $REPORT_DIR/report.html"
exit 1
fi
echo "Security scan passed."
八、报告解读
ZAP 报告按风险等级分类:
- High(高危):SQL 注入、远程代码执行等严重漏洞,需要立即修复。
- Medium(中危):XSS、CSRF 等常见漏洞,需要尽快修复。
- Low(低危):信息泄露、不安全的配置等,建议修复。
- Informational(信息):安全最佳实践建议,可作为参考。
每条告警都包含详细的描述、解决方案和参考链接,按照建议逐一处理即可提升 Web 应用的安全性。
九、常见问题
扫描超时
调整超时参数:
docker run -t ghcr.io/zaproxy/zaproxy:stable zap-full-scan.py \
-t https://example.com \
-m 10 \
-r report.html
-m 参数设置最大扫描时间(分钟)。
无法访问 HTTPS 站点
确保容器内的时间和证书正确,如果目标使用自签名证书,可以忽略 SSL 错误。
总结
OWASP ZAP 是 Web 安全测试的标准工具,通过 Docker 可以在搬瓦工 VPS 上方便地运行各种安全扫描。无论是开发阶段的安全检测还是生产环境的安全审计,ZAP 都能提供有价值的安全发现。配合 Nikto Web 扫描和 Nuclei 漏洞扫描,可以实现更全面的 Web 安全评估。选购搬瓦工 VPS 请查看全部方案,使用优惠码 NODESEEK2026 可享受折扣。如有问题可通过搬瓦工官网提交工单。