只看成功页面,会系统性地漏掉被拦截、超时、跳转失败和返回错误码的请求,于是你看到的“覆盖率”和“漏洞分布”其实是筛选后的样本。要判断这种偏差是否影响结论,先确认检测任务是否记录了失败请求及其原因,再决定是否把失败样本纳入下一轮扫描范围。
第一种条件:检测目标是摸清站点整体暴露面。此时只看成功页面,等于默认“能正常打开的部分就是全部”。判断依据不是成功页面的数量,而是失败请求的构成——有多少是连接被拒、有多少是证书或协议不匹配、有多少是响应超时。这些原因分别指向防火墙拦截、服务未监听、链路不稳定三类不同问题,处理动作也完全不同。
第二种条件:检测目标是核对某个已知组件的版本或配置。此时成功页面反而是有效样本,因为你要看的就是该组件在正常响应下的表现。判断依据变成:失败请求是否集中在同一路径或同一端口。如果是,说明该组件可能被单独保护或未对外开放,不能据此判定它不存在。
两种条件的取舍点在于:前者必须把失败请求当作待解释对象,后者可以把失败请求当作范围外噪声。搞混这两种条件,就会把“没扫到”误读成“不存在”。
当运维、开发和安全管理对同一份报告有不同理解时,不要先争论结论,先做这一步:从检测日志中导出所有非成功响应,按状态码或错误类型分组,每组抽一条原始请求记录。
这个动作的结果会直接改变下一步:若失败集中在检测环境侧,应先修正扫描出口或代理配置,再重新跑一轮;若失败集中在目标侧,则应把该目标标记为“待确认不可达”,而不是“无漏洞”。
假设某次检测共发起 200 个请求,成功 150 个,失败 50 个。如果只看成功页面,覆盖率显示为 75%,漏洞分布也只基于这 150 个页面。但把这 50 个失败请求按原因拆开后发现:30 个是目标返回 403,15 个是连接超时,5 个是 DNS 解析失败。这三类原因分别对应访问控制、链路质量和解析配置,属于三种不同的待查项。此时正确的下一步不是提高成功率数字,而是先确认 403 是预期防护还是配置错误。
这个例子里的数字仅用于说明拆分方法,不代表任何真实检测结果。
如果检测范围被明确限定为“仅评估已公开且可正常访问的页面”,并且这一限定写在检测委托说明里,那么只看成功页面是成立的。此时需要在报告开头写明该限定,避免读者把结果理解为全站结论。
例外情况是:当失败请求的比例高到足以改变漏洞类型的分布时,即使范围有限定,也应单独列一节说明失败样本的构成。因为读者无法从成功页面推断出被排除部分是否存在同类风险。
这三类证据齐全时,团队对“扫到了什么”和“没扫到什么”的理解才能对齐。缺少任何一类,结论都只能停留在成功页面的范围内,而成功页面本身无法回答它排除了什么。