不能直接横向比较。上线时间不同的页面,暴露时长、历史变更次数、被扫描和被抓取的机会都不同,漏洞数量或告警数的差异里混着“暴露时长”这个变量。要在缺少完整数据和权限的前提下做比较,可行做法是先按“可比条件”把页面分组,再只在组内比,组间只比趋势和证据链,不比值。
能不能横向比,取决于两件事:暴露面是否对齐、检测口径是否对齐。两者都满足,才谈得上直接比;缺一个,就只能比变化方向。
如果两组条件都满足,可以直接比同一次检测中各页面的同一类问题,例如“都缺少同一响应头”或“都存在同一注入点类型”。如果只满足一项,比如暴露面对齐但检测时间相隔很久,那么比“同一页面在两个时间点的变化”比跨页面比值更可靠,因为时间变量被固定住了。
当你既能登录、又能对目标发起受控验证时,横向比较的价值最大,但比较单位要换掉。
具体动作:把每个页面的发现按“问题类型 + 可复现步骤 + 影响路径”三列整理,然后统计类型分布而不是数量总和。原因是上线早的页面往往积累了更多历史遗留问题,数量高只说明它老,不说明它更危险。
假设一个短例子:A 页面上线两年,检出 12 条告警,集中在过期组件和缺失响应头;B 页面上线两周,检出 3 条,但其中 1 条是可越权读取他人数据的接口缺陷。按总数比,A 更“差”;按类型和影响比,B 的那 1 条优先级更高。这个假设说明的是比较方法,不代表任何真实站点的结果。
这个动作的结果会直接影响下一步:类型分布一旦做出来,后续修复排期就不再按页面排序,而是按“同类问题批量修”排序,同一类缺陷在多页复用同一修复模式,成本低于逐页处理。
拿不到后台、不能复现、只有第三方估算或搜索引擎报告时,横向比数值基本没有意义。第三方估算流量、搜索引擎报告和站内统计三套口径本来就不同,把它们的数字放在一起排序,得到的差异无法归因到漏洞本身。
此时仍可执行的最小动作是:对每个页面记录“首次出现异常迹象的时间点”和“该迹象对应的可观察证据”,例如某路径开始返回异常状态码、某接口响应体结构发生变化、某类请求在日志中集中出现。然后只做纵向比较——同一页面在不同时间的证据是否连续、是否可解释。
需要明确不能推出的结论:某个指标归零或某个统计突然下降,不能单独证明处理正确。它也可能是采集口径变了、页面下线了、缓存生效了、抓取路径被调整了,或者只是观测窗口太短。把这些替代解释列出来并逐一排除,比直接宣布“已修复”更接近诊断。
上线时间不同的页面之间,如果要放在一张图上看,只保留两个维度:问题类型的严重程度和该类型是否可被外部触发。这两个维度不随页面年龄变化,因此可以跨组对齐。
这样做的例外是:当某个页面已经下线、已迁走或不再对外可达时,把它放进任何比较都会污染结论,应当先从比较集合中移除,只保留历史记录用于追溯。
为了让下一次检测不必重新争论“能不能比”,可以写一条简短规则:同一次检测、同一暴露面、同一问题类型,才允许比值;其余情况只比趋势和证据链。规则写清楚后,报告里出现的数字才不会被误读成页面之间的优劣排序。
这条规则也约束了动作顺序:先确认可比条件,再决定比什么,最后才决定修什么。跳过前两步直接按告警数排优先级,通常会把最老的页面排在前面,而把真正可被外部触发的问题压在后面。