返回博客
CDN 快取污染是什么?从 Cache Key 与请求处理看防护关键

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 快取与安全策略。

延伸阅读

快,还要更安全

欢迎您透过 Telegram 联络我们,技术专员将即时为您服务

立即咨询