百度云防护 WAF 缓存功能升级:新增”忽略源站不缓存标头”,彻底解决恶意爬虫 no-cache 绕过

百度云防护 WAF 缓存功能升级,新增忽略源站不缓存标头开关,开启后将忽略源站返回的 Cache-Control: no-store、no-cache、max-age=0 及 Pragma: no-cache 指令,按控制台规则强制缓存。彻底解决恶意爬虫通过伪造 no-cache 响应头绕过 WAF 缓存规则、刷回源量的顽疾。

速读摘要:百度云防护 Web 应用防火墙(WAF)缓存功能再次升级——新增”忽略源站不缓存标头”开关。开启后,WAF 将强制忽略源站返回的 Cache-Control: no-storeno-cachemax-age=0 以及 Pragma: no-cache 等”不缓存”指令,一律按控制台规则强制缓存。这一更新彻底解决了长期以来恶意爬虫通过伪造 no-cache: 0max-age=0 响应头绕过 WAF 缓存规则、刷回源量的顽疾,对中小网站尤其友好。

百度云防护·编辑规则:忽略源站不缓存标头(新功能开关位置)

一、长期痛点:恶意爬虫用 no-cache 绕过 WAF 缓存

很多站长都遇到过这种”诡异”的现象:

  • WAF 控制台明明配置了静态资源缓存 30 天,但实际命中率只有 20%;
  • 看回源流量明细,同一个文件被反复回源拉取——明明是同一个 URL、同一个 IP 段;
  • 关掉 WAF 缓存规则后回源量反而没变化——证明 WAF 缓存根本就没生效。

1.1 罪魁祸首:HTTP 协议里的”不缓存”指令

按照 HTTP 规范,源站可以通过响应头告诉中间缓存节点”不要缓存我”。常用的几个:

响应头 含义 攻击者如何利用
Cache-Control: no-store 完全不缓存 直接跳过 WAF 缓存,全部回源
Cache-Control: no-cache 每次都要回源校验 即便 WAF 想缓存也必须回源校验
Cache-Control: max-age=0 立即过期 缓存 0 秒,等于不缓存
Pragma: no-cache HTTP/1.0 时代的”不缓存” 老旧爬虫还在用这个头

1.2 恶意爬虫的”绕过姿势”

更让人头疼的是:很多攻击者/爬虫会伪造响应头来”骗”过 WAF 缓存:

  1. 控制客户端发自定义请求头,让服务端返回带 no-cache 的响应;
  2. 抓取目标源站的真实响应(本身就有 no-cache 头),转发给 WAF 校验逻辑;
  3. 频繁变更请求 URL 参数?v=123?_t=timestamp)让 WAF 视作”新请求”无法命中缓存。

效果就是:明明开启了缓存,实际命中率就是上不去,源站被打爆。这种情况在新闻类、招聘类、内容聚合类站点尤为明显。

二、新功能:忽略源站不缓存标头

百度云防护 WAF 在最近的版本更新中,新增了“忽略源站不缓存标头”开关。开启后,WAF 在缓存决策时不再看源站返回的 no-storeno-cachemax-age=0Pragma: no-cache统一按控制台配置的缓存策略执行

2.1 开启方式

路径:百度智能云控制台 → 云防护 → Web 应用防火墙 → 网页防篡改 → 选择规则 → 编辑缓存设置 → 找到”忽略源站不缓存标头“开关 → 打开。

上图红框标注的就是这个开关位置。打开后右侧会变成蓝色,并伴随一个 ⓘ 提示”开启后将忽略源站 no-store/no-cache/max-age=0 指令”。

2.2 开关开启后行为

源站响应 关闭时 WAF 行为 开启后 WAF 行为
Cache-Control: no-store 不缓存 强制按控制台规则缓存
Cache-Control: no-cache 每次回源校验 强制按控制台规则缓存
Cache-Control: max-age=0 立即过期 强制按控制台规则缓存
Pragma: no-cache 不缓存 强制按控制台规则缓存
Cache-Control: max-age=3600 按 3600 秒缓存 按 3600 秒缓存(不变)
Cache-Control: public, max-age=86400 按 86400 秒缓存 按 86400 秒缓存(不变)
Cache-Control 按控制台规则缓存 按控制台规则缓存(不变)

也就是说:只忽略”不缓存”的指令,不会改变正常的缓存策略。这是一个非常克制的设计——只解决”被恶意绕过”的问题,不影响”正常协商”。

三、为什么这个功能值得关注?

3.1 直接收益

  • 缓存命中率提升:实测开启后静态资源命中率从 20% 提升到 85%+(视业务而定);
  • 回源量下降:相同 IP/UA 的反复访问基本都命中 WAF 缓存,回源量可以下降 60% 以上
  • 源站 CPU 压力缓解:典型场景——新闻站首页 HTML、图片 CDN 域名,可以直接把”被恶意刷的回源请求”挡在 WAF 这一侧;
  • 抗 CC 能力提升:对”伪装成不同 URL 刷同一份文件”的攻击,结合 WAF 缓存策略可实现”重复请求零回源”

3.2 适用场景

  • 新闻资讯 / 博客类:静态文章 HTML、图片资源;
  • 招聘 / 房产信息类:列表页、详情页内容高度可缓存;
  • 企业官网:产品介绍页、案例页;
  • API 网关加速:GET 请求 + 幂等接口;
  • CDN 加速域名:源站本身可能误带 no-cache,WAF 这层覆盖。

3.3 注意事项

  • 不能完全替代源站 HTTP 头规范:源站仍应按业务合理设置 Cache-Control,WAF 这个开关只是兜底;
  • 登录态页面(如 /user/center/order/list不要走 WAF 缓存规则,更不要打开这个开关,否则会把用户私有页面缓存给所有人
  • 带有 Set-Cookie 的响应保持谨慎:WAF 默认会跳过带 Cookie 的响应缓存,开启此开关也不会改变这个行为;
  • 灰度验证:建议先在测试站开启、观察 24 小时命中率曲线,确认业务正常后再全量灰度。

四、配合使用的最佳实践

4.1 推荐的 WAF 缓存策略(以”招聘/资讯类网站”为例)

路径模式 缓存有效期 忽略不缓存标头 说明
*.html*.htm 1 小时 开启 列表/详情页
*.css*.js 30 天 开启 静态资源
*.jpg*.webp*.png 30 天 开启 图片资源
/api/*(GET) 1 分钟 关闭 准实时接口
/user/*/admin/* 0(不缓存) 私有路径

4.2 Nginx 兜底配置(无 WAF 场景)

如果你还没上 WAF,可以临时在 Nginx 上把”恶意 no-cache”头过滤掉:

给TA打赏
共{{data.count}}人
人已打赏
0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
在线客服
在线客服
热线电话
QQ客服
电子邮箱
suduwangluo