深入解析 Web 应用中的 CHIPS(Partitioned Cookie Attribute)

news2024/11/25 1:12:47

深入解析 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 存储提供一种隐私友好的解决方案:

  1. 隐私保护:通过分区存储,避免第三方 Cookie 被用于跨站追踪。
  2. 功能性支持:允许跨站点场景(如嵌入式内容)拥有独立的 Cookie 存储,不受其他站点的干扰。
  3. 兼容性:减少浏览器对传统跨站点功能的影响,确保用户体验。

三、CHIPS 的设计

CHIPS 的核心设计是引入了 Partitioned 属性,用于定义 Cookie 的存储隔离规则:

1. 分区机制

  • 在跨站点请求中,浏览器为每个 Top-Level Origin(顶级站点)Embedded Origin(嵌入站点) 创建独立的 Cookie 分区。
  • 分区的关键由 (Top-Level Origin, Embedded Origin) 组成。例如:
    • 用户在 example.com 页面嵌入了 iframe.analytics.com
    • 分区后,analytics.comexample.com 中的 Cookie 不会与 analytics.com 在其他站点的 Cookie 冲突。

2. Partitioned 属性

CHIPS 的关键属性是 Partitioned,它必须与 SameSite=None; Secure 一起使用。示例:

Set-Cookie: user_session=abc123; Path=/; Secure; SameSite=None; Partitioned
  • Secure:必须通过 HTTPS 设置。
  • SameSite=None:允许跨站点访问。
  • Partitioned:指定 Cookie 为分区 Cookie。

四、CHIPS 的工作原理

  1. 设置 Partitioned Cookie

    • 在 HTTP 响应头中返回带有 Partitioned 属性的 Cookie。
    • 浏览器将为特定的 (Top-Level Origin, Embedded Origin) 创建独立的 Cookie 存储。
  2. 存储和检索

    • 当用户访问 example.com 页面,嵌入的 iframe.analytics.com 会使用其自己的 Cookie 分区。
    • 即使用户访问其他顶级站点(如 another.com)也嵌入了 iframe.analytics.com,它的 Cookie 状态是独立的。
  3. 隐私保证

    • Cookie 的分区存储仅限于当前顶级站点上下文,无法用于跨站追踪。

五、CHIPS 的实际应用

1. 嵌入式第三方服务

场景:嵌入到站点的第三方支付、聊天工具等需要维持用户的会话状态,但不能访问其他站点的用户信息。

2. 广告网络优化

广告平台可以为每个顶级站点独立存储用户的点击数据,避免与其他站点数据混合。

3. 分析工具

像 Google Analytics 这样的工具可以使用 Partitioned Cookie 来跟踪同一顶级站点内的用户活动,同时避免跨站点的隐私问题。


六、如何在后端使用 CHIPS

以下是使用 Python 的 Web 框架(Flask 和 Django)的示例,展示如何在后端设置 Partitioned Cookie。

1. Flask 示例

from flask import Flask, make_response

app = Flask(__name__)

@app.route('/')
def set_cookie():
    response = make_response("Partitioned Cookie Set!")
    # 设置 Partitioned Cookie
    response.set_cookie(
        'user_session', 
        'abc123', 
        path='/', 
        secure=True, 
        samesite='None', 
        httponly=True
    )
    response.headers.add('Set-Cookie', 'user_session=abc123; Path=/; Secure; SameSite=None; Partitioned')
    return response

if __name__ == '__main__':
    app.run(ssl_context='adhoc')

2. Django 示例

from django.http import HttpResponse

def set_cookie(request):
    response = HttpResponse("Partitioned Cookie Set!")
    response.set_cookie(
        'user_session',
        'abc123',
        path='/',
        secure=True,
        samesite='None',
        httponly=True
    )
    # 手动添加 Partitioned 属性
    response['Set-Cookie'] = 'user_session=abc123; Path=/; Secure; SameSite=None; Partitioned'
    return response

七、如何在前端使用 CHIPS

前端开发者需要确保以下几点:

  1. 确保通过 HTTPS 加载页面和嵌入内容Secure 属性要求 Cookie 只能通过 HTTPS 传输。
  2. 正确配置 SameSite 属性:必须设置为 SameSite=None
  3. 加载 iframe 或嵌入资源时传递 Cookie
    • 使用 <iframe> 标签时,需指定 allow 属性:
      <iframe src="https://analytics.com" allow="partitioned-cookies"></iframe>
      
    • 或在 fetch 请求中指定 credentials: 'include'
      fetch('https://analytics.com/data', {
          credentials: 'include'
      });
      

八、CHIPS 的优势与局限性

优势

  1. 隐私友好:解决了跨站点 Cookie 滥用问题。
  2. 支持合法跨站场景:如嵌入式服务、支付网关等。
  3. 与现代隐私政策兼容:符合 GDPR 等隐私法规的要求。

局限性

  1. 浏览器兼容性:目前仅部分现代浏览器支持 CHIPS。
  2. 复杂性增加:开发者需要额外配置 Cookie 和跨站请求。

九、总结

CHIPS 提供了一种隐私友好的跨站点 Cookie 管理方式,通过分区存储解决了传统第三方 Cookie 的隐私问题。在 Web 应用中,开发者可以通过后端设置带有 Partitioned 属性的 Cookie,并在前端正确传递和管理这些 Cookie,实现安全可靠的跨站功能。

随着 Web 隐私标准的不断演进,CHIPS 将成为构建现代 Web 应用的关键工具之一。如果你的应用需要支持跨站场景,赶快尝试使用 CHIPS 优化隐私和功能吧!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2246991.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Banana Pi BPI-CanMV-K230D-Zero 采用嘉楠科技 K230D RISC-V芯片设计

概述 Banana Pi BPI-CanMV-K230D-Zero 采用嘉楠科技 K230D RISC-V芯片设计,探索 RISC-V Vector1.0 的前沿技术&#xff0c;选择嘉楠科技的 Canmv K230D Zero 开发板。这款创新的开发板是由嘉楠科技与香蕉派开源社区联合设计研发&#xff0c;搭载了先进的勘智 K230D 芯片。 K230…

Django+Nginx+uwsgi网站使用Channels+redis+daphne实现简单的多人在线聊天及消息存储功能

网站部署在华为云服务器上&#xff0c;Debian系统&#xff0c;使用DjangoNginxuwsgi搭建。最终效果如下图所示。 一、响应逻辑顺序 1. 聊天页面请求 客户端请求/chat/&#xff08;输入聊天室房间号界面&#xff09;和/chat/room_name&#xff08;某个聊天室页面&#xff09;链…

TransFormer--整合编码器和解码器

TransFormer--整合编码器和解码器 下图完整地展示了带有编码器和解码器的Transformer架构。 在图中&#xff0c;N表示可以堆叠N个编码器和解码器。我们可以看到&#xff0c;一旦输入句子&#xff08;原句&#xff09;&#xff0c;编码器就会学习其特征并将特征发送给解码器&…

短视频矩阵矩阵,矩阵号策略

随着数字媒体的迅猛发展&#xff0c;短视频平台已经成为企业和个人品牌推广的核心渠道。在这一背景下&#xff0c;短视频矩阵营销策略应运而生&#xff0c;它通过高效整合和管理多个短视频账号&#xff0c;实现资源的最优配置和营销效果的最大化。本文旨在深入探讨短视频矩阵的…

Apple Vision Pro开发002-新建项目配置

一、新建项目 可以选择默认的&#xff0c;也可以选择Universal 3D 二、切换打包平台 注意选择Target SDK为Devices SDk&#xff0c;这种适配打包到真机调试 三、升级新的Input系统 打开ProjectSettings&#xff0c;替换完毕之后引擎会重启 四、导入PolySpatial 修改上图红…

【StarRocks】starrocks 3.2.12 【share-nothing】 多Be集群容器化部署

文章目录 一. 集群规划二.docker compose以及启动脚本卷映射对于网络环境变量 三. 集群测试用户新建、赋权、库表初始化断电重启扩容 BE 集群 一. 集群规划 部署文档 https://docs.starrocks.io/zh/docs/2.5/deployment/plan_cluster/ 分类描述FE节点1. 主要负责元数据管理、…

LLaMA-Factory 上手即用教程

LLaMA-Factory 是一个高效的大型语言模型微调工具&#xff0c;支持多种模型和训练方法&#xff0c;包括预训练、监督微调、强化学习等&#xff0c;同时提供量化技术和实验监控&#xff0c;旨在提高训练速度和模型性能。 官方开源地址&#xff1a;https://github.com/hiyouga/L…

Java基础面试题01-请描述Java中JDK和JRE的区别?

什么是 JDK&#xff1f; JDK 全称 Java Development Kit&#xff0c;中文叫“Java 开发工具包”。 它是给 Java 开发者用的工具箱&#xff0c;里面有一切写代码、编译代码、调试代码所需要的工具。 JDK 包括什么&#xff1f; Java 编译器&#xff08;javac&#xff09;&…

Ubuntu20.04下安装向日葵

向日葵远程控制app官方下载 - 贝锐向日葵官网 下载Ununtu版的图形版本的安装deb包SunloginClient_15.2.0.63064_amd64.deb 直接执行 sudo dpkg -i SunloginClient_15.2.0.63064_amd64.deb 的话会报错: 如果在Ubuntu20.04里直接执行sudo apt install libgconf-2-4安装libgco…

Typora+PicGo+云服务器搭建博客图床

文章目录 前言一. 为什么要搭建博客图床&#xff1f;1.1 什么是图床&#xff1f;1.2 为什么要搭建博客图床? 二. 安装软件三. 配置阿里云OSS3.1 注册,开通对象储存3.2 创建bucket3.3 找到你的地域节点3.4 accessKeyId和accessKeySecret3.5 给你的阿里云账户充值 四. 配置4.1 配…

Python的3D可视化库 - vedo (2)visual子模块 基本可视化行为

文章目录 1. visual模块的继承关系2. 基类CommonVisual的方法2.1 获取对象信息2.1.1 对象本身信息2.1.2 对象的查找表2.1.3 对象标量范围2.1.4 对象缩略图 2.2 呈现对象2.2.1 在窗口显示1.2.2 对象可见性 2.2.3 对象颜色2.2.4 对象透明度 2.3 添加标度条2.3.1 2D标度条2.3.2 3D…

常用Rust日志处理工具教程

在本文中&#xff0c;我想讨论Rust中的日志。通过一些背景信息&#xff0c;我将带您了解两个日志库&#xff1a;env_logger和log4rs。最后&#xff0c;我将分享我的建议和github的片段。 Rust log介绍 log包是Rust中日志API的事实标准&#xff0c;共有五个日志级别&#xff1…

废品买卖回收管理系统|Java|SSM|Vue| 前后端分离

【重要①】前后端源码万字文档部署文档 【重要②】正版源码有问题包售后 【包含内容】 【一】项目提供非常完整的源码注释 【二】相关技术栈文档 【三】源码讲解视频 【其它服务】 【一】可以提供远程部署安装&#xff0c;包扩环境 【…

案例研究|阿特斯的JumpServer分布式部署和多组织管理实践

苏州阿特斯阳光电力科技有限公司&#xff08;以下简称为阿特斯&#xff09;是一家集太阳能光伏组件制造和为全球客户提供太阳能应用产品研发、设计、制造、销售的专业公司。 阿特斯集团总部位于加拿大&#xff0c;中国区总部位于江苏省苏州市。通过全球战略和多元化的市场布局…

tongweb安全整改

一 禁止以root账号运行tongweb服务 1 如果是首次安装须创建普通用户安装tongweb 2 如果已经使用root账号安装了tongweb 2.1 创建普通用户 2.2 使用root账号授予tongweb安装目录宿主权限为普通用户 2.3赋权成功后&#xff0c;后续启动tongweb服务必须为普通用户 二 tongRDS隐…

快速识别模型:simple_ocr,部署教程

快速识别图片中的英文、标点符号、数学符号、Emoji, 模型会输出图片中文字行的坐标位置、最低得分、识别结果。当前服务用到的模型&#xff1a;检测模型、数字识别、英文符号识别。 一、部署流程 1.更新基础环境 apt update2.安装miniconda wget https://repo.anaconda.com/…

tcpdump抓包 wireShark

TCPdump抓包工具介绍 TCPdump&#xff0c;全称dump the traffic on anetwork&#xff0c;是一个运行在linux平台可以根据使用者需求对网络上传输的数据包进行捕获的抓包工具。 tcpdump可以支持的功能: 1、在Linux平台将网络中传输的数据包全部捕获过来进行分析 2、支持网络层…

HarmonyOS4+NEXT星河版入门与项目实战(11)------Button组件

文章目录 1、控件图解2、案例实现1、代码实现2、代码解释3、运行效果4、总结1、控件图解 这里我们用一张完整的图来汇整 Button 的用法格式、属性和事件,如下所示: 按钮默认类型就是胶囊类型。 2、案例实现 这里我们实现一个根据放大和缩小按钮来改变图片大小的功能。 功…

YOLOV5 /onnx模型转换成rknn

上两篇文章讲述了pytorch模型下best.pt转换成onnx模型&#xff0c;以及将onnx进行简化成为best-sim.onnx, 接下来这篇文章讲述如何将onnx模型转换成rknn模型&#xff0c;转换成该模型是为了在rk3568上运行 1.创建share文件夹 文件夹包含以下文件best-sim.onnx,rknn-tookit2-…

【51单片机】LCD1602液晶显示屏

学习使用的开发板&#xff1a;STC89C52RC/LE52RC 编程软件&#xff1a;Keil5 烧录软件&#xff1a;stc-isp 开发板实图&#xff1a; 文章目录 LCD1602存储结构时序结构 编码 —— 显示字符、数字 LCD1602 LCD1602&#xff08;Liquid Crystal Display&#xff09;液晶显示屏是…