空值和零值在扫描结果里往往不是同一件事:零值通常表示“扫到了目标,但该项计数为零”,空值更可能表示“这一项没有产生可判定结果”,原因可能是超时、鉴权失败、目标类型不适用或字段本身不适用于该资产。先看同一字段在整批样本中的分布,再决定保留原值、改写成明确状态,还是把该字段从这批结果里退出,是最稳妥的起点。
在个别样本上,空值和零值看起来都像“没问题”,但规模化之后例外会暴露出来。判断时不要盯单个资产,而是把同一字段按值分组:
一个实际动作是:对同一批目标,把该字段的原始返回值、扫描耗时和最终状态码一起导出,按值分组统计。如果空值集中出现在耗时接近超时阈值的样本上,那么“空值等于无风险”这个假设就不成立,下一步应调整超时或重试,而不是直接进入报告。
当字段定义清楚,且空值能对应到具体原因(如目标不存在、协议不支持),保留原值最有利于追溯。前提是你已经能说明每个空值来自哪一步。若做不到,保留只会把问题推迟到汇总阶段。
把空值改写为“未评估”、把零值改写为“已评估,计数为零”,能让下游读者不混淆。适用前提是改写规则固定,并且原始值仍可回溯。改写后要检查一件事:原本被当作零风险统计的资产数量是否发生变化。如果变化明显,说明之前的汇总口径确实有问题,后续的对比基线也要跟着调整。
如果某个字段在多种目标类型上都大量返回空值,且无法用超时、鉴权或适用范围解释,那么把它从这批结果中退出,比强行赋值更诚实。退出的代价是失去该维度的横向对比,所以应同时记录退出原因,供下一轮换用其他检查方式时参考。
要区分“真的为零”和“没扫到”,可以固定几个可观测信号做交叉验证,例如:目标是否可达、鉴权是否成功、该检查项是否在本次配置中启用、返回耗时是否接近阈值。假设一批 100 个目标中,某字段零值 80 个、空值 20 个,且空值全部集中在耗时接近超时的样本上;而另一批里空值分散、耗时正常。前者更像采集超时,后者更像字段不适用。这个例子只用于说明比较方法,不代表任何真实扫描结果。
关键点是:请求量或抓取量归零,不能单独证明“没有风险”,它也可能是目标不可达、被拦截或配置未生效。只有把返回值和采集条件放在一起看,才能决定下一步是重扫、改口径还是换检查方式。
区分清楚之后,动作应该体现在下一轮配置里:对超时导致的空值,调整超时或重试;对鉴权失败导致的空值,修正凭据;对字段不适用导致的空值,换用适用范围更匹配的检查项或明确标注“不适用”。做完这些再重新采集一次,比较空值比例是否下降。如果下降,说明原因判断成立;如果不变,说明还有未被识别的因素,需要继续拆解,而不是急着把结果写进最终报告。