只看成功页面做网站恶意代码检测,会把“能正常打开、能返回200的页面”当成整站健康的证据,但恶意代码恰恰常挂在404、302、被屏蔽的变体或仅对特定来源生效的响应里。成功页面样本只能证明这些页面在那次请求下没暴露问题,不能证明全站没有被注入、没有条件性跳转。
常见情形是:你抓了首页、栏目页、若干文章页,HTML里没有可疑外链,<script>也干净,于是判断站点没有被挂马。但搜索引擎或安全扫描给出的结论仍是“存在恶意内容”。这不是工具误报,而是样本选择造成的盲区——成功页面是被筛选过的子集,出问题的页面往往是被你跳过的那部分。
解释一:确实只有成功页面干净,恶意代码集中在非成功响应。攻击者常让正常访问返回干净内容,而让爬虫、特定UA或特定Referer拿到注入版本;也可能把跳转放在404模板、错误页或已删除但仍可访问的URL上。这类页面的共同点是:它们不在你的“成功页面”清单里。
解释二:成功页面也不干净,只是你的检测方式没触发。恶意脚本可能按来源IP、Cookie、时段或访问频次决定是否输出。你用固定环境抓成功页面,拿到的永远是干净分支,于是把“未被触发”误读成“不存在”。
两种解释指向的排查方向完全不同:前者要扩大样本范围,后者要改变请求条件。把它们混为一谈,就会反复重扫同一批正常页却始终找不到原因。
关键证据是同一URL在不同请求条件下是否返回不同内容。可按下面顺序取证:
如果不同条件下响应体一致,且非成功响应也干净,那么“成功页面干净”这个结论的适用范围可以扩大;如果出现分支差异,说明问题在条件性输出,此时继续扩大页面数量没有意义,应先固定触发条件再复现。
假设某站有1000个URL,你只抽了200个返回200的页面,检测全部通过。把范围扩到全部URL、并保留404和重定向响应后,发现其中若干已删除文章的404页面里被写入了跳转脚本。这里的数字只用于说明抽样比例,不代表真实站点数据。
实际动作是:把检测脚本的采集范围从“状态码等于200”改为“记录所有状态码及响应体”,并对同一批URL做多UA对比。结果是问题页从成功页集合里消失、却在错误页集合里出现,下一步就应转向修复错误页模板和跳转逻辑,而不是继续加扫正常页面。
如果站点结构简单、无动态模板差异、无按来源分流,且历史检测已确认错误页与重定向不输出用户内容,那么以成功页面为主的抽查可以作为日常巡检的一部分。但只要存在以下任一条件,就不能把成功页面的干净结果外推到整站:使用会按UA或Referer输出不同内容的模板;存在大量已删除但仍可访问的URL;错误页由可编辑模板生成;近期有过模板、插件或主题改动。满足这些条件时,检测范围必须覆盖非成功响应,否则成功页面越多,越容易掩盖真实问题。