First-Party Set 测试说明

First-Party Set 的最新版本现已准备好用于开发者功能标志测试(从 Chrome 108 开始)。我们正积极开发 First-Party Set,以向未来推出此功能。因此,在 Chrome 111 发布(2023 年 3 月初)之前,我们会考虑就本阶段的开发者测试提供反馈意见。

生态系统反馈强调,如果 Chrome 不再支持第三方 Cookie,跨网站用例将受到影响。First-Party Set 提案检查并解决一类跨网站用例,在这些用例中,相互依赖的网站可向浏览器表明这种关系,以便浏览器可以代表用户执行适当的操作和/或有效地向用户呈现该信息。

更新后的方案使用两个 API(Storage Access API 和暂定名为 requestStorageAccessForOrigin 的新 API)为网站提供一种有效的方法,用于请求对 First-Party Set 中的 Cookie 进行跨网站访问权限。您可以按照以下说明测试并验证您可能希望为网站创建哪些集合,以及调用两种不同 API 的合适点。

First-Party Set 概览

First-Party Set (FPS) 是一种 Web 平台机制,可供开发者声明网站之间的关系,以便浏览器可以使用这些信息,出于面向用户的特定目的启用对跨网站 Cookie 的受限访问。在第三方环境中,Chrome 会根据声明的关系来决定何时允许或拒绝网站访问其 Cookie。

概括来讲,First-Party Set 是一组网域的集合,网域只有一个“set 主域名”,也可能有多个“set 成员”。只有网站作者才能将其网域提交到一个资源集,并且他们需要声明每个“群组成员”与其“主要群组”之间的关系。集合成员可包含一系列不同的网域类型,并根据用例使用子集

为便于浏览器根据每个子集的隐私保护影响来处理每个子集,我们提议利用 Storage Access API (SAA) 和 requestStorageAccessForOrigin 在 FPS 内启用 Cookie 访问。

采用 SAA 后,网站可以主动请求跨网站 Cookie 访问。如果发出请求的网站与顶级网站处于同一 FPS 状态,Chrome 会自动批准该请求。如需了解其他浏览器如何处理对 SAA 的调用,请参阅 Storage Access API (SAA) 文档

SAA 目前要求该文档必须先获得用户激活,然后才能调用该 API 的方法。

对于使用跨网站图片或需要 Cookie 的脚本代码的顶级网站,这可能会使采用 FPS 变得非常困难。为了应对其中一些挑战,我们提出了新的 API requestStorageAccessForOrigin,以便开发者更轻松地采用这一变更。此 API 也可用于测试。

设置提交内容

规范 FPS 列表将是一个可公开查看的列表(采用 JSON 文件格式),存放在新的 FPS GitHub 代码库中,该列表将作为所有集合的可信来源。Chrome 将使用此文件来应用其行为。

如需详细了解提交内容集的提议流程和要求,请查看提交指南。您还可以尝试提交一组图片,以测试对提交内容进行验证的各种技术检查。请注意,在稳定版 Chrome 提供 FPS 之前,所有提交内容都将被清除。

由于集提交流程仍处于积极开发阶段,因此对于本地测试,您只能在命令行上创建集并将其直接传递给浏览器。对于本地测试,无需将集提交到 GitHub 代码库即可使用功能标志进行测试。

如何在本地测试

前提条件

若要在本地测试 FPS,请使用通过命令行启动的 Chrome 108 或更高版本。

若要在 Chrome 功能发布之前抢先试用,请下载 Chrome Beta 版Canary 版。

示例

google-chrome \
--enable-features="FirstPartySets,StorageAccessAPI,StorageAccessAPIForOriginExtension,PageInfoCookiesSubpage,PrivacySandboxFirstPartySetsUI" \
--use-first-party-set="{\"primary\": \"https://first-party-sets.glitch.me\", \"associatedSites\": [\"https://fps-member-1.glitch.me\"]}" \

详细了解如何使用 flag 运行 Chromium

步骤

若要在本地启用 FPS,您需要使用 Chrome 的 --enable-features 选项和以逗号分隔的标志列表(详见本部分中的说明),并将一组相关网站声明为要传递给 --use-first-party-set 的 JSON 对象。

启用 FPS

FirstPartySets:在 Chrome 中启用 FPS。

FirstPartySets

启用 Storage Access API

StorageAccessAPI

在 Chrome 中启用 Storage Access API (SAA),以便嵌入式 iframe 使用 requestStorageAccess() 请求访问跨网站上下文中的 Cookie,即使浏览器阻止了第三方 Cookie 也是如此。

请注意,调用 requestStorageAccess() 时,需要用户手势才能进行解析。由于 SAA 规范仍在不断完善中,Chrome 的未来版本可能会提出不同的要求。请点击此处,查看我们计划对 Chrome 的 SAA 实施做出的改进。

StorageAccessAPIForOriginExtension

让顶级网站能够使用 requestStorageAccessForOrigin() 代表特定源请求存储空间访问权限。对于使用需要 Cookie 的跨网站图片或脚本代码并解决采用 SAA 时面临的一些挑战的顶级网站来说,这非常有用。

在本地声明集

每个 First-Party Set 都是一个网域的集合,网域集合有一个“主要集合”,可能有多个“集合成员”。集合成员可包含一系列不同的网域类型,并根据用例使用子集

创建一个 JSON 对象,其中包含属于某个集的网址,并将其传递给 --use-first-party-set

在以下示例中,primary 列出主域名,associatedSites 列出满足关联的子集要求的网域。

{
     "primary": "https://primary.com",
    "associatedSites": ["https://associate1.com", "https://associate2.com", "https://associate3.com"]
}

例如:

--use-first-party-set="{\"primary\": \"https://first-party-sets.glitch.me\", \"associatedSites\": [\"https://fps-member-1.glitch.me\"]}"

对于本地测试,您只能在命令行上创建集并将其直接传递给浏览器。出于本地测试目的,不会进行集验证,但当 FPS 在稳定版中推出后,所有集都将需要提交到 FPS GitHub 代码库,并符合验证标准。

启用 FPS 界面

PageInfoCookiesSubpage

允许在可通过网址栏访问的 PageInfo 部分显示 FPS。

PrivacySandboxFirstPartySetsUI

在 Chrome 设置中的“隐私设置和安全性”→“Cookie 及其他网站数据”(chrome://settings/cookies) 下,启用 FPS 界面“允许相关网站查看您在该群组中的活动记录”选项。

验证是否已屏蔽第三方 Cookie

  1. 在 Chrome 设置中,依次前往“隐私和安全”→“Cookie 及其他网站数据”,或访问 chrome://settings/cookies。
  2. 在“常规”设置下,确保“阻止第三方 Cookie”处于启用状态。
  3. 检查子选项“允许相关网站查看该群组中的活动记录”是否也处于启用状态。

安全注意事项

由于 Storage Access API 允许网站在特定情况下重新获得对第三方 Cookie 的访问权限,因此可能会使 Web 应用程序容易受到跨站攻击和信息泄露。在跨网站环境中依赖 Cookie 的网站应了解 CSRF 和其他攻击的风险。

计划中的改进

为了改善这种情况,未来发布的 Chrome 版本会要求采用额外的安全控制功能,以确保明确选择启用嵌入式播放器。我们提议的改进将:仅按帧授予访问权限、要求对基于凭据的请求进行 CORS 检查,并且仅保留对源的访问权限。如需了解详情,请参阅近期的安全分析

查看针对 Chrome 实施 SAA 的计划改进列表

请注意,Chrome 只会在跨网站嵌入式上下文中发送标记为 SameSite=None 的 Cookie,这正是 Storage Access API 的相关问题。不过,在所有浏览器都弃用对这些 Cookie 的默认访问之前,我们不能对 Cookie 的用途做出任何假设。不能认为仅在 FPS 内允许访问,且网站应继续使用标准安全最佳实践。

互动和分享反馈

通过本地测试,您可以试用 Storage Access API 机制来实现 FPS,并分享反馈或您遇到的任何问题。此外,您还可以在 GitHub 上测试集合提交流程,并借此机会分享您的流程和验证步骤方面的经验。要与更新后的提案互动并分享反馈,请执行以下操作: