先给有条件的结论:当你能把访客分配记录、各版本样本的检测日志和原始文件哈希对应到同一条时间线时,样本污染通常可以被识别为“同一访客或同一会话被重复计入不同版本”,而不是检测结果本身变差。这个结论只在版本切换边界清晰、日志保留原始标识的前提下成立;如果版本切换期间缓存、回源或灰度规则本身发生了变更,污染与真实差异会混在一起,结论失效。
访客被分配到不同版本,常见于灰度发布、A/B 测试或分阶段替换旧系统。此时“样本污染”有两种来源:分配层把同一访客先后送进两个版本,样本层则把两个版本的文件混在同一批检测输入里。两者表现相似,但处理动作不同。
区分证据可以看三点:
如果访客标识重复出现在两个版本,优先怀疑分配层;如果文件哈希跨版本重复,优先怀疑样本层。只有前者成立时,清理分配规则或去重会话才可能让对比恢复意义;只有后者成立时,需要回到采集和归档环节,而不是调整分配比例。
站内统计、检测工具报告和第三方估算的流量口径不同,单看某一项归零或突增,不能证明污染已被排除。更稳妥的做法是建立一条最小证据链:
动作的结果会直接影响下一步:如果重复项集中在切换后的短窗口内,说明污染更可能来自切换瞬间的会话漂移,后续应延长观察窗口再比较;如果重复项均匀分布在整个周期,说明分配规则本身没有稳定隔离,后续应先修正分配再谈版本差异。
假设某旧系统准备退出,保留其中仍有价值的检测规则,同时上线新版本。运维把 10% 访客分配到新版本,90% 留在旧版本。三天后,新版本的恶意代码检出数低于旧版本。此时不能直接得出“新版本检测能力下降”。
回查发现,部分访客在第一天被分配到新版本,第二天因缓存过期又回到旧版本,同一会话在两个版本各产生一条检测记录。若把这类重复会话剔除后,两版本的检出差异缩小甚至消失,那么原先的差异更可能是样本污染造成的,而不是版本能力差异。这个例子中的数字仅用于说明比较方法,不代表任何真实项目结果。
如果版本切换期间同时修改了检测规则、样本采集范围或回源策略,那么即使你识别出跨版本重复项,也无法把差异单独归因于样本污染。例如,新版本上线时顺带扩大了扫描目录,旧版本仍只扫描原目录,此时检出数变化可能来自扫描范围,而不是访客分配。遇到这种情况,先冻结其他变量,再重新建立对照,否则任何去重动作都只能解释一部分现象。
在旧内容、旧系统或旧合作关系退出阶段,建议先做一次小范围隔离验证:选一个版本边界明确、日志完整的时间窗口,只保留分配记录和检测记录都齐全的会话,重新计算两版本的检出分布。如果污染项占比高到足以改变方向性结论,就先修正分配和采集,再决定旧部分是否保留;如果污染项占比低且不影响方向,才可以进入下一步的退出评估。
只有当分配层和样本层都能被同一套标识追溯时,访客被分配到不同版本这件事才不会污染检测样本,退出决策也才有可靠依据。