很多运维人员把高防CDN的缓存和安全当成两件独立的事:CDN管缓存加速,高防管攻击清洗。但真实场景中,攻击来的时候,最怕的不是流量打满,而是——缓存还在不在?回源会不会被打爆?登录态会不会被缓存串给其他用户?
高防CDN的本质是一套带安全约束的内容分发系统。缓存策略配错了,加速没效果是小事,数据串号、回源攻击才是大问题。
一、先分清楚:什么能缓存,什么绝对不能
高防CDN配置的第一步不是调规则,而是给请求打标签。不同内容的缓存策略差异极大:
| 资源类型 | 典型内容 | 缓存建议 | 原因 |
|---|---|---|---|
| 静态资产 | 图片、CSS、JS、视频切片 | 30天以上,文件名带hash | 同一URL对所有人返回一致 |
| 半动态数据 | 排行榜、公告、地区天气 | 5s-60s短缓存 | 大家看到一样,但变化快 |
| 动态请求 | 登录、下单、支付、API写操作 | 不缓存(no-store) | 带Cookie,不同用户结果不同 |
| 错误响应 | 404、502、504 | 默认不缓存 | 缓存错误页会导致业务恢复后用户仍看到旧错误 |
最常见的事故是把登录态缓存了。如果边缘节点无脑缓存一切,用户的登录信息、订单数据可能被串给其他人。这类请求必须设置Cache-Control: no-store,边缘只做安全检测,不缓存响应。
二、攻击态下的缓存自适应
攻击发生时,高防CDN需要从“加速优先”自动切换到“安全优先”模式:
| 模式 | 正常状态 | 攻击状态 |
|---|---|---|
| 缓存TTL | 按预设规则 | 动态延长,减少回源 |
| 回源策略 | 正常回源 | 启用请求合并,多次请求只回源一次 |
| 限速阈值 | 宽松 | 收紧,但对已认证会话放宽 |
| 人机校验 | 低频触发 | 高频触发,但白名单用户免校验 |
攻击态自适应的关键在于“有策略地收紧,而非一刀切”。全局限频太狠,学校、企业的NAT出口、App批量刷新会被全部误杀。正确的做法是对已通过认证的会话保持宽松,只对异常流量收紧。
三、缓存穿透:看起来像访问,其实是回源攻击
缓存穿透是高防CDN容易被忽略的攻击面。攻击者不打带宽,而是构造大量不存在的URL(如随机图片路径),这些请求无法命中缓存,全部穿透到源站,耗尽源站CPU。
防御手段包括:
空值缓存:对确认不存在的资源,短时间缓存404响应,防止同一URL反复穿透
请求合并:100个用户同时请求同一个未缓存资源,边缘只回源1次,其余用户等待
URL白名单:仅放行已知的资源路径格式,随机路径直接拒绝
四、回源链路的安全隔离
缓存之后的另一个关键环节是回源。高防CDN清洗后的干净流量回源,源站需要做到:
白名单回源:源站防火墙仅放行CDN回源IP段,其余全部拒绝
静态与动态回源隔离:静态资源回源和API回源走不同连接池,避免互相影响
回源加密:回源链路启用加密,防止中间人查看业务报文
如果源站还有公网直连入口,攻击者绕过CDN直接打源站,缓存和清洗全部失效。源站白名单是高防CDN生效的前提条件。
五、常见问题
Q:高防CDN缓存和普通CDN缓存有什么区别?
核心区别在安全约束。高防CDN需要在缓存策略中嵌入安全判断,攻击态下自动调整缓存和回源行为,普通CDN没有这层逻辑。
Q:缓存命中率多少算正常?
静态资源为主的站点,命中率应在85%以上。命中率低于70%说明缓存策略需要调整。
Q:攻击时缓存会不会被击穿?
会。攻击者可能构造大量不存在的URL穿透缓存。需要配置空值缓存和请求合并来防御。
相关阅读: