网站恶意代码检测:新旧页面能否直接横向比较

📍 WDQWDWQD987AAAAA:216.73.216.175
📱 Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com)
🔗 /b6a06de4a246.html
📄

网站恶意代码检测:新旧页面能否直接横向比较

不能直接横向比较。网站恶意代码检测中,把上线半年的旧页面和刚上线三天的新页面放在同一张表里比“谁更可疑”,很容易把正常的新页面波动误判成感染,也容易漏掉旧页面里长期潜伏的代码。要比较,先要判断两者是否处在同一可观测阶段,再决定保留、改写还是退出比较。

先分清两种页面处在什么阶段

新页面刚上线时,抓取、收录、缓存和外部引用都还没稳定,页面自身的脚本加载、第三方资源调用也常处于调整期。旧页面则相反,结构、外链和访问来源相对固定,任何突变都更容易被识别为异常。

因此,横向比较成立的前提是:两类页面都已有稳定的历史基线,且检测口径一致。如果新页面还没有形成基线,它只能作为“待观察对象”,不能作为判断旧页面是否感染的参照。

可区分的证据:旧页面出现与历史版本不一致的外链脚本、混淆代码或隐藏跳转,而新页面只是加载了尚未稳定的统计脚本。前者指向被篡改,后者更可能是上线初期的正常调整。

保留比较:什么条件下可以放在一起看

保留横向比较,需要同时满足几个条件:

满足这些条件时,横向比较可以帮助定位是模板级问题还是单页问题。若多个新页面同时出现同类异常,而旧页面没有,优先怀疑模板或公共组件;若只有旧页面出现异常,则更可能是单页被针对。

一个假设例子:假设某站有十个旧页面和三个新页面,检测发现三个新页面都加载了同一个新脚本,而十个旧页面都没有。此时不应直接判定新页面被感染,而应先确认该脚本是否为近期统一部署。确认是统一部署后,比较的结论应从“感染”改为“配置变更”,下一步转为核对部署记录,而不是清理代码。

改写比较:把绝对对比换成同阶段对比

当新页面还没有稳定基线时,直接横向比较不成立,但可以把比较改写成“同阶段对比”:拿新页面和同样处于上线初期、使用相同模板的其他页面比,或者拿旧页面和它自己的历史版本比。

这种改写的好处是,比较对象处在相近的可观测阶段,异常信号更容易分离。代价是需要更多历史数据,且不能立刻给出“新旧谁更危险”的结论。

实际动作:先按上线时间给页面分组,再在组内比较检测结果。如果组内差异明显,说明问题可能出在单页;如果组内一致、组间不同,说明问题更可能来自模板或部署批次。这个动作的结果会直接决定下一步是查单页内容,还是查公共组件和部署流程。

退出比较:什么时候该停止横向对照

出现以下情况时,继续横向比较的收益很低:

此时应退出横向比较,转为单页纵向核查:对照该页面自己的历史快照、版本记录和资源清单,确认是否有未授权的改动。退出比较不是放弃检测,而是换一种更可靠的诊断路径。

需要说明的适用条件:无论保留、改写还是退出比较,都要求检测口径一致。如果新页面用一套检查项,旧页面用另一套,比较结果没有解释力。第三方估算流量、搜索引擎报告和站内统计的口径本就不同,不能混在一起当作页面是否感染的证据。

把结论落到下一步动作

比较的目的不是给页面排序,而是决定下一步查哪里。若新旧页面在同一模板下表现一致,优先查公共组件和部署记录;若只有旧页面异常,优先查单页内容和历史版本;若只有新页面异常,先确认是否为上线初期的正常调整,再决定是否深入。

网站恶意代码检测中,横向比较只有在两类页面都具备稳定基线、一致口径和相近结构时才成立;否则应改写比较对象或退出比较,改用纵向核查。这个判断本身,就是决定保留、改写还是退出的依据。

图1 图2

nginx