URL安全扫描出现“已拦截”“风险页面”“漏洞告警”,先别急着改服务器配置。最常见的假象来源是扫描器或中间层读到了缓存副本:CDN边缘节点、反向代理、浏览器、扫描平台自身的快照,都可能把旧响应重新交给扫描器。判断起点很简单——同一URL在带随机查询参数、禁用缓存、直连源站三种条件下分别请求一次,对比响应头、状态码和正文指纹。三者不一致,基本可以确认是缓存层在制造假象。
URL安全扫描的对象是HTTP响应,而一次请求可能经过浏览器缓存、CDN、WAF、反向代理、应用服务器多个环节。扫描器拿到的内容未必是源站当前真实输出。排查时按下面顺序固定证据:
?cachebust=1730000000,再请求一次。Age、Cache-Control、X-Cache、CF-Cache-Status(若存在)等字段,判断是否命中缓存。curl -I只取响应头,和扫描器报告逐项对照。如果带随机参数的响应与报告内容不同,说明扫描结果对应的很可能是缓存副本,而不是当前源站输出。
把“可能原因”和“已经定位的原因”分开,避免看到告警就直接改配置。可以固定做三组请求:
判断规则:
注意,HTTPS只保证传输加密,不代表内容无漏洞;扫描器报“安全”也不等于站点没有风险。缓存排查解决的是“结果是否可信”,不是“站点是否安全”。
确认是缓存假象后,按影响范围从小到大处理:
Cache-Control或s-maxage,必要时缩短静态资源与HTML的缓存时间。Cache-Control: no-cache。验收信号:刷新后,带随机参数与不带参数的响应正文指纹一致,响应头中不再出现明显的缓存命中标记,扫描结果与直连源站结果趋同。若刷新后告警仍在,且直连源站也能复现,就应转向真实漏洞排查,而不是继续清缓存。
下一步:挑一个被报告风险的URL,按“常规、绕缓存、直连”三组请求各做一次,记录响应头与正文差异。若绕缓存与直连一致、仅常规请求异常,就按缓存假象处理并刷新对应缓存;若直连同样异常,再进入真实漏洞排查流程。