结论先给:额度有限时,不要按“页面数量”平均分配样本,而应按“可疑程度×流量价值×结构差异”排序,优先扫描那些一旦中招损失最大、且最能暴露扫描器检出能力的页面。一个反例是:如果你只扫首页和几个高流量栏目页,而挂马恰恰藏在带参数的内容页或旧模板页里,那么即使首页全部干净,也不能据此判断整站安全——这不是扫描器漏报,而是样本没覆盖到风险面。
常规做法是“首页+栏目页+若干内页”各取一些,看似公平,实则把额度摊薄在低风险页面上。挂马注入通常有明确的落点偏好:动态参数、可写入的评论区、被遗忘的旧模板、上传目录附近的展示页。这些页面往往流量不高,但一旦被注入,搜索引擎抓取到的就是带恶意跳转的版本。平均抽样会让这些页面大概率落选,扫描结果自然“全部正常”,给你一个虚假的安心。
更合理的做法是把样本分成三层:必扫层(已知有用户输入、有文件写入、模板陈旧的页面)、验证层(与必扫层同模板但参数不同的页面,用来判断问题是模板级还是单页级)、对照层(结构相似但确认干净的页面,用来观察扫描器是否误报)。额度少时,宁可放弃对照层,也要保住必扫层和少量验证层。
你不需要知道扫描器的内部规则,只需要从站点自身找线索。以下信号能帮你区分“值得占额度”和“可以往后放”:
?id=、?page= 这类参数的页面,比纯静态路径更容易成为注入入口。优先扫参数值可被外部影响的页面。把这几个信号做成简单打分:带参数+可写入+旧模板的页面排最前;纯静态、近期改过、无外链的页面排最后。额度只够扫十个页面时,这个排序比随机抽取更能暴露问题。
假设某站有 2000 个页面,扫描额度只够 20 个。按平均抽样,可能选 1 个首页、5 个栏目页、14 个随机内页。若挂马集中在 3 个带参数的旧评论页,这 20 个样本很可能全部漏掉。按信号排序后,20 个样本里有 12 个是带参数的可写入页面、5 个是同模板验证页、3 个是近期改动过的对照页。假设扫描器对其中 2 个页面报出可疑脚本,你下一步就不是“再扫更多页面”,而是先人工核对这些页面的模板和写入记录,确认是模板级注入还是单页被改。这个动作会直接决定你是批量修复模板,还是只清理个别页面。
注意,这个例子只说明排序方法,不代表任何真实扫描器的检出率。实际结果取决于扫描器的规则和站点结构,需要你自己用少量样本验证。
如果站点的主要风险不是页面内容注入,而是服务器配置、数据库层面的批量挂马,那么按页面信号挑样本就不够用。此时页面本身可能都是干净的,恶意代码在更底层的位置。另一个失效条件是:你完全不知道哪些页面带参数、哪些可写入,只能凭 URL 猜测。这种情况下,先花少量额度扫一个覆盖面广的入口页,观察扫描器返回的是“页面级结果”还是“整站级告警”,再决定下一步。若扫描器只给页面级结果,你就需要回到站点日志或文件列表里找线索,而不是继续消耗额度随机扫页面。
额度有限时,最实际的流程是:先用 3 到 5 个样本做一次定向试探,样本全部来自你判断风险最高的那一类页面。如果全部干净,不要立刻断定安全,而是检查这批样本是否真的覆盖了带参数、可写入、旧模板这三个条件;如果只覆盖了其中一个,说明样本还不够有信息量,应该换一批再试。如果出现可疑结果,先人工核对一个页面,确认告警对应的是模板、单页还是外部资源,再决定是继续扫同类页面还是转向文件层排查。这个动作的结果会直接影响你后续把额度花在“扩大页面覆盖”还是“深入同一类页面”,而不是盲目扫完整站。