1. 章节定位
对应OWASP TOP 10:信息收集是所有漏洞测试的基础,直接影响A1注入、A5访问控制等核心风险的覆盖完整性。本章节聚焦于建立应用执行路径的全面视图,确保后续测试无盲区。
2. 测试原理
路径盲区导致安全漏洞:
现代Web应用通常包含:
- 显式路径:导航菜单、页面链接等可见入口点
- 隐式路径:需特定参数触发的API端点、权限校验分支等
- 动态路径:JS/AJAX异步加载的接口和功能
未覆盖的路径如同未上锁的房间,攻击者可利用未测试的代码路径实施注入、越权等攻击。
3. 测试方法
3.1 自动爬取(基础覆盖)
-
启动
ZAP
爬虫:- 目标URL输入
https://target.com
- 右键菜单选择
Attack
>Spider
图示:红框标注爬虫操作菜单位置
- 目标URL输入
-
处理动态内容:
- 启用
AJAX Spider
插件(需安装) - 配置浏览器代理为
ZAP
的监听端口(默认8080) - 执行用户操作(登录、表单提交等)
- 启用
-
导出路径清单:
Sites
面板右键导出URLs in Context
为CSV
3.2 代码覆盖率分析(深度验证)
JaCoCo集成步骤:
- 挂载代理启动被测应用:
java -javaagent:jacocoagent.jar=destfile=/reports/jacoco.exec -jar app.jar
-
执行
ZAP
自动化扫描:- 导入爬取发现的URL列表
- 启用主动扫描策略
-
生成覆盖率报告:
java -jar jacococli.jar report /reports/jacoco.exec \
--classfiles target/classes --html /reports/coverage
报告关键指标:
覆盖率类型 | 安全意义 | 达标阈值 |
---|---|---|
行覆盖率 | 基础执行路径覆盖 | ≥80% |
分支覆盖率 | 条件判断逻辑覆盖 | ≥70% |
方法覆盖率 | 关键功能模块调用覆盖 | ≥90% |
3.3 人工路径探索
-
业务流程映射:
-
特权路径探测:
- 修改URL参数:
/user/profile?id=100
→/admin/config
- 测试非常规入口:
/api/v1/export?format=pdf
- 修改URL参数:
4. 修复建议
4.1 开发层优化
结构化URL设计:
// 反例:动态路径难以追踪
@GetMapping("/doAction")
public Response action(@RequestParam String cmd) {
switch(cmd) {
case "create": return createItem();
case "delete": return deleteItem(); // 易被忽略的分支
}
}
// 正例:RESTful风格明确路径
@PostMapping("/items")
public Item createItem() {...}
@DeleteMapping("/items/{id}")
public void deleteItem(@PathVariable String id) {...}
JaCoCo集成到CI/CD:
<!-- Maven配置示例 -->
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>prepare-agent</goal>
</goals>
</execution>
<execution>
<id>report</id>
<phase>test</phase>
<goals>
<goal>report</goal> <!-- 生成HTML报告 -->
</goals>
</execution>
</executions>
</plugin>
4.2 运维层加固
-
路由监控:
- 部署
ELK
收集Nginx访问日志 - 设置告警规则:
未登记路径的访问请求 > 5次/分钟
- 部署
-
自动化路径验证:
# 定期对比生产路径与测试覆盖报告 awk '{print $7}' access.log | sort | uniq > prod_paths.txt comm -23 prod_paths.txt tested_paths.txt > uncovered_paths.txt
持续改进闭环:
通过将路径映射纳入DevSecOps流程,确保每次迭代均验证关键安全路径。