网站挂马检测:新旧页面能否直接横向比较

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

网站挂马检测:新旧页面能否直接横向比较

不能直接横向比较。业务上线时间不同的页面,挂马检测的基线本来就不同:旧页面经历过多轮改版、插件升级和合作方变更,新页面则处在相对干净但样本不足的阶段。把两者的检测结果放在同一张表里排序,很容易把“历史包袱”误读成“当前风险”,从而做出错误的退出或保留决定。

矛盾现象:旧页面问题多,未必是它更危险

在挂马检测中常见一个反常结果:上线多年的页面被标记的可疑项明显多于新页面,于是有人主张优先下线旧内容。但换一个角度看,旧页面被扫得更久、被抓取更频繁、被更多外部系统引用,暴露面天然更大。问题多,可能只是“被看得多”,而不是“被改得多”。

这里的关键是区分两种解释:

两种解释都会让旧页面“看起来更脏”,但处理方式完全相反:前者可以保留并逐步清理,后者必须立即隔离。

能区分两种解释的证据

不要只看可疑项数量,要看这些项的时间属性和行为属性。以下证据链可以帮助区分:

  1. 可疑代码的首次出现时间。如果可疑片段与某次已知改版、某次插件升级时间吻合,更支持累积暴露解释;如果出现在最近一次无人操作的时段,更支持真实入侵解释。
  2. 可疑代码是否仍在被执行。用页面实际渲染后的结果与源码对比:源码里有可疑片段、但渲染后并未加载,可能是残留;源码和渲染结果都出现,则更可能是活跃植入。
  3. 访问路径是否集中。真实入侵往往伴随特定入口的异常跳转或特定用户代理的定向返回;累积残留通常分散、无规律。
  4. 站内统计与外部报告的口径差异。第三方估算流量、搜索引擎报告和站内统计的统计口径不同,不能直接相减得出“被挂马导致的损失”。只能把它们当作不同视角的线索,交叉验证同一时间点是否出现同步变化。

假设一个例子:某旧页面在三个月前的一次模板更新后,源码中多出一段外部脚本引用。站内统计显示该页面访问量没有明显变化,搜索引擎报告也没有异常抓取波动。此时更合理的判断是残留引用而非活跃挂马,动作可以是先移除该引用并观察,而不是直接下线整个页面。这个假设说明的是比较方法,不是真实项目结论。

按上线时间分组,而不是按可疑项数量排序

要让比较有意义,应该先按上线时间或最近一次实质性变更时间分组,再在组内比较。具体动作:

执行这个分组后,下一步的判断会发生变化:原本排名靠前的旧页面可能被降级为“观察并清理”,而某个新页面如果出现与近期变更时间吻合的活跃可疑代码,反而应优先处理。分组的目的不是降低旧页面的优先级,而是让优先级对应真实风险,而不是对应页面年龄。

退出与保留:用证据决定,而不是用年龄决定

当旧内容、旧系统或旧合作关系需要退出时,挂马检测结果常被当作“是否保留”的依据。但上线时间不同的页面本身不具备可比性,直接横向比较会误导决策。更稳妥的做法是:

需要提醒的是,请求量、抓取量或某项统计归零,并不能单独证明处理正确。归零还可能来自缓存、抓取策略调整、页面被临时屏蔽等合理解释。因此,判断应基于多条证据链的交叉验证,而不是单一指标的升降。

把上线时间作为分组维度,把行为证据作为优先级依据,才能在退出与保留之间做出可复核的决定,而不是被页面年龄或可疑项数量牵着走。

图1 图2

nginx