先给结论:如果自动导出只抓了第一页或默认页数,完整性检查不能靠“文件行数看起来不少”来判断,而要用导出总量与页面分页元数据做交叉核对。只有当你同时拿到总数、页大小和每页首尾记录标识时,遗漏分页才可被定位;缺少其中任何一项,行数正常也可能掩盖缺页。
挂马扫描软件的自动导出通常有两种机制:一种是接口按游标或偏移量分页返回,另一种是网页列表按页渲染后由脚本抓取。前者如果只取第一页,常见原因是脚本没有继续请求下一页游标;后者如果只取第一页,常见原因是脚本等待的是页面加载完成,而不是分页控件可点击。两种机制下,完整性检查的入手点不同:接口导出要先看响应里有没有总数和下一页标识,网页导出要先看列表页面上有没有页码总数或“共 N 条”的提示。
实际动作:先手动触发一次导出,但把页大小临时调小,例如从每页 500 条改成每页 50 条。如果导出结果仍然只有 50 条,说明脚本没有处理分页循环;如果结果变成 50 的整数倍但少于预期,说明分页循环中途停止。这个动作的结果会直接决定下一步:前者要补分页请求逻辑,后者要检查停止条件是不是被错误设置成了“空页即结束”。
不要只看导出文件的总行数。下面三个证据能区分“确实漏页”和“看起来少但实际完整”:
假设一个例子:某次导出得到 480 条,界面显示总数 500,页大小 50。480 不是 50 的整数倍,说明不是简单少抓一整页,而可能是导出过程中有 20 条被过滤或去重。这时先不要重跑全量,而应对比过滤条件和去重规则,否则重跑仍会得到同样结果。
有一种情况会让上述结论失效:当挂马扫描软件在导出时对重复记录做了合并,而不同页上恰好存在重复标识,那么“导出条数等于总数”也可能已经漏掉了某一页。例如总数 500,页大小 100,共 5 页;第 2 页和第 4 页各有 10 条重复记录,导出时去重后总数仍显示 500,但实际只覆盖了 4 页。此时行数吻合不能证明完整。
要排除这个反例,需要把唯一标识单独导出一次,不参与去重,然后检查标识集合是否覆盖了所有页的首尾范围。如果唯一标识数量少于界面总数,说明存在重复或合并;如果唯一标识数量等于总数但页码集合不连续,说明仍有分页遗漏。
确认缺口后,不要直接全量重跑。更稳妥的动作是:根据页码连续性证据,只补抓缺失的页码范围,然后把补抓结果与已有文件按唯一标识合并去重。合并后再次核对总数和首尾标识。如果补抓后总数仍然少于界面总数,下一步不是继续补抓,而是检查导出过滤条件、时间范围或权限范围是否与界面查询条件一致。
如果补抓后总数吻合但首尾标识仍不一致,说明分页边界处理有问题,常见于最后一页不满页大小时被跳过。这时应单独请求最后一页,确认返回条数小于页大小时是否仍被计入。这个动作的结果会影响后续自动化脚本的停止条件:停止条件应从“返回空页”改为“已抓取条数达到总数或游标为空”。
这套检查不依赖某个具体品牌的按钮位置或当前功能,因为不同挂马扫描软件的导出入口和分页参数可能不同,具体信息需要以你所用工具的当前界面和接口文档为准。完整性检查的核心始终是:用总数、页大小和唯一标识三组数据互相约束,而不是相信单一的文件行数。