
CDN 快取污染是什么?从 Cache Key 与请求处理看防护关键
发布于 2026-11-04|作者: ByteShield Team
重点摘要
- 同一个网址,不一定代表相同的内容;若 CDN 将需要区分的请求视为相同,就可能把不适合共用的回应提供给客户。
- CDN 快取污染(Cache Poisoning)是攻击者利用 CDN 与源站的判断落差,让受到操控的回应进入共用快取。
- Cache Key 并非越复杂越好,涉及身分与授权的内容,也不能仅靠增加快取栏位就认定安全。
- 源站的 private、no-store、no-cache 快取指示意义不同,三者不能混用,也要确认 CDN 规则是否覆写源站设定。
- 看到 HIT 只能证明快取被使用,仍需透过分阶段与跨账号验证,确认回传内容正确。
网站导入 CDN 后,通常会透过快取降低回源流量、缩短载入时间,让不同地区的使用者更快取得内容。然而,当网站同时提供多语系、会员服务与个人化资讯时,快取设定也需要配合应用程式的实际行为调整。
同一个网址,不一定代表相同的内容。若 CDN 将原本需要区分的请求视为相同,就可能把不适合共用的回应提供给客户。当攻击者进一步利用这类判断落差,让受到操控的回应进入共用快取,就可能形成 CDN 快取污染(Cache Poisoning)。
因此,评估 CDN 快取效果时,除了速度与命中率,也需要确认:哪些内容可以被共用,以及 CDN 的判断是否与源站一致。
为什么同一个网址,可能需要回传不同内容?
以跨境电商网站为例,使用者开启相同的商品页面,看到的内容可能因情境而有所不同:
- 语系差异:中国与日本使用者选择不同语系,页面文字随之改变。
- 币别调整:使用者切换计价币别,商品价格与促销资讯跟着调整。
- 个人化资讯:会员登入后,页面出现专属折扣价、账户资讯或购物车状态。
这些差异可能来自 URL 路径、Query String、Cookie、HTTP Header,或应用程式判断的登入状态。
从源站的角度来看,这些是需要分别处理的请求;但如果 CDN 只依照部分资讯区分快取,就可能将不同版本合并。
需要注意的是,显示错误语系或币别,不一定代表遭到攻击;它也可能只是快取策略与业务逻辑没有对齐。因此,在追求快取效率之前,必须先确认内容的共用范围。
CDN 如何决定能否使用同一份快取?
CDN 通常透过 Cache Key(快取键),识别请求所对应的快取内容。Cache Key 可以理解为查找快取的索引,实际组成则取决于平台与设定,可能涉及网域、路径、Query String 或指定的请求栏位。
例如,网站透过以下网址提供不同币别:
| 请求网址 | 源站预期回传内容 |
|---|---|
| /products/item-a?currency=CNY | 人民币价格 |
| /products/item-a?currency=JPY | 日圆价格 |
如果 CDN 忽略 currency,源站却依照这个参数产生不同内容,就可能发生版本混用。
快取污染则进一步涉及攻击者操控回应。例如,应用程式信任了外部传入的 Header,依其内容产生页面连结;但 CDN 没有区分这个 Header 的差异。当受到操控的页面被快取,后续正常访客也可能取得同一份内容。
处理方式需要依应用需求决定:移除不必要的输入影响、让快取策略正确区分内容,或让该回应略过共用快取。
Cache Key 并非越复杂越好。 将所有 Cookie 与参数纳入,可能产生大量低重用性的快取版本;涉及身分与授权的内容,也不能仅靠增加快取栏位就认定安全。
快取设定需要确认哪些资讯?
设定之前,建议先依应用路径整理“哪些资讯会改变回应”,再决定共用与排除规则。
| 请求资讯 | 需要确认的问题 | 预期内容与设定方向 |
|---|---|---|
| 路径 Path | 是公开资源、会员页面,还是交易端点? | 商品图片可评估共用;账户与结账内容应明确限制共用快取。 |
| Query String | 参数是否影响语系、币别、搜寻条件或存取权限? | 保留有意义的内容差异;追踪参数需确认不影响回应后,才评估忽略。 |
| Cookie | 是否改变会员价格、购物车或个人化资讯? | 公开内容与个人化内容分开处理,避免不同使用者共用敏感回应。 |
| Header | 是否参与语系选择、转址或内容生成?由谁设定? | 确认必要栏位、可信来源与处理方式,避免直接信任用户端提供的代理资讯。 |
| 预期内容 | 相同条件下,哪些部分应一致?哪些必须隔离? | 建立可比较的验收标准,涵盖本文、状态码、回应 Header 与转址位置。 |
源站的快取指示也需要一并检查。依 HTTP 快取规范,private 限制共用快取储存回应,no-store 要求不储存,而 no-cache 允许储存,但重用前必须验证,三者不能混用。
部署时还要确认 CDN 规则是否覆写源站设定,并实测 Vary、Cookie 与授权请求的处理结果。不能只因档名看起来像静态资源,就认定内容适合公开共用。
如何验证快取设定?
验收应同时检查效能与内容正确性。建议在隔离的测试网域或授权环境中,使用测试账号与合成资料,依序比较三个阶段:
| 验证阶段 | 检查内容 |
|---|---|
| 源站回应 | 不同语系、币别与账号,是否取得预期内容? |
| CDN 首次回应 | 在确认没有既有快取后,回源结果是否与预期一致? |
| 后续快取命中 | 另一个工作阶段取得的内容,是否仍符合其请求条件? |
每次测试先改变一个条件,才能厘清差异来自哪里。除了本文,也应比较状态码、转址位置、快取控制与平台提供的快取状态资讯。
跨账号检查尤其重要:账号 A 完成操作后,账号 B 与未登入访客不应取得 A 的个人资讯;公开且允许共用的内容,则应维持正确版本。
因此,看到 HIT 只能证明快取被使用,仍需要确认回传内容正确。 若浏览器与 CDN 结果不同,也要分别排查浏览器快取,避免混淆问题来源。
如果想进一步了解如何透过速度测试、Response Header 与快取命中率检查 CDN 的实际表现,也可以参考〈CDN 真的有在工作吗?从速度测试到快取命中率的排查流程〉。
若确认发生污染,应先限制受影响的快取行为、保留必要纪录,修正根因后再清除相关快取并复测,避免错误内容再次被写入。
系统更新后,哪些设定需要重新检查?
快取策略需要随应用演进。以下变更都应纳入检查:
| 系统变更 | 重新确认的重点 |
|---|---|
| 新增语系或币别 | 选择依据是否改变?不同版本是否仍能正确区分? |
| 新增会员与个人化功能 | 原本公开的回应是否开始带入使用者资料? |
| API 改版 | 同一路径是否因 Token、参数或权限回传不同内容? |
| 调整 Proxy、负载均衡或回源架构 | Header 信任来源、Host 与 URL 解析是否一致? |
| 修改 CDN 快取规则 | 规则优先顺序、排除范围与源站指示是否仍符合预期? |
尤其当边缘节点、代理与源站对编码、重复参数或路径正规化的解读不同时,原本的设定假设可能失效。应用与网路团队需要用同一组测试案例确认结果。
ByteShield 如何协助评估 CDN 快取策略?
企业评估快取策略时,可以先提供主要业务路径、预期内容差异,以及登入与个人化需求,让技术团队更容易掌握应用行为。
ByteShield 已提供快取策略优化、Response Header 检查、回源异常排查与效能分析等技术支援,可作为评估快取设定的基础。
实际评估时,可依序整理需求、确认平台支援的设定范围,再由双方共同定义验收案例,将内容正确性、账号隔离与效能表现一起纳入检查。
常见问题
什么是 CDN 快取污染?
当 CDN 将原本需要区分的请求视为相同,攻击者便可能利用这类判断落差,让受到操控的回应进入共用快取,后续正常访客也可能取得同一份内容,这就是 CDN 快取污染(Cache Poisoning)。
Cache Key 是否越复杂越好?
不是。将所有 Cookie 与参数纳入,可能产生大量低重用性的快取版本;涉及身分与授权的内容,也不能仅靠增加快取栏位就认定安全。应先依应用路径整理哪些资讯会改变回应,再决定共用与排除规则。
看到 HIT 就代表快取设定正确吗?
不一定。HIT 只能证明快取被使用,仍需要确认回传内容正确。验证时除了本文,也应比较状态码、转址位置、快取控制与平台提供的快取状态资讯,并检查不同账号与未登入访客是否取得各自应有的内容。
系统更新后,哪些情况需要重新检查快取设定?
新增语系或币别、新增会员与个人化功能、API 改版、调整 Proxy、负载均衡或回源架构,以及修改 CDN 快取规则时,都应重新确认快取策略是否仍符合预期。
如果您的网站涉及多语系、会员服务、个人化页面或高流量 API,欢迎了解 ByteShield SCDN 服务,或联系 ByteShield,根据现有应用架构与交付需求,评估合适的 CDN 快取与安全策略。


