深入解析 Web 应用中的 CHIPS(Partitioned Cookie Attribute)
最新发现flask3.1.0 的版本引入了新的特性:对CHIPS的支持。不少同学对这个可能有点陌生,本文带大家了解一下。
为了在隐私保护和功能需求之间取得平衡,Google 推出了 CHIPS(Cookies Having Independent Partitioned State) 标准。它通过引入 Partitioned Cookie Attribute,允许跨站点环境下的独立 Cookie 存储,为特定场景提供隐私友好的解决方案。
一、CHIPS 的起源
传统的 Cookie 存储机制包括 第一方 Cookie 和 第三方 Cookie:
- 第一方 Cookie:由用户访问的站点设置,用于会话管理、用户偏好等。
- 第三方 Cookie:由嵌入到站点中的第三方资源(如广告或分析脚本)设置,用于跨站跟踪。
由于隐私问题,浏览器开始逐步限制第三方 Cookie。例如:
- Safari 的 Intelligent Tracking Prevention (ITP)。
- Firefox 的 Enhanced Tracking Protection (ETP)。
- Chrome 的计划(Privacy Sandbox)将逐步淘汰第三方 Cookie。
然而,限制第三方 Cookie 会导致某些合法的跨站点功能失效,例如嵌入式服务的会话保持。为了满足这些场景的需求,CHIPS 应运而生。
二、CHIPS 的目的
CHIPS 的主要目标是为跨站点环境下的 Cookie 存储提供一种隐私友好的解决方案:
- 隐私保护:通过分区存储,避免第三方 Cookie 被用于跨站追踪。
- 功能性支持:允许跨站点场景(如嵌入式内容)拥有独立的 Cookie 存储,不受其他站点的干扰。
- 兼容性:减少浏览器对传统跨站点功能的影响,确保用户体验。
三、CHIPS 的设计
CHIPS 的核心设计是引入了 Partitioned 属性,用于定义 Cookie 的存储隔离规则:
1. 分区机制
- 在跨站点请求中,浏览器为每个 Top-Level Origin(顶级站点) 和 Embedded Origin(嵌入站点) 创建独立的 Cookie 分区。
- 分区的关键由
(Top-Level Origin, Embedded Origin)
组成。例如:- 用户在
example.com
页面嵌入了iframe.analytics.com
。 - 分区后,
analytics.com
在example.com
中的 Cookie 不会与analytics.com
在其他站点的 Cookie 冲突。
- 用户在
2. Partitioned 属性
CHIPS 的关键属性是 Partitioned
,它必须与 SameSite=None; Secure
一起使用。示例: