Mercado Libre 如何测试 Privacy Sandbox 来更好地保护客户隐私

Mercado Libre 是拉丁美洲领先的电子商务平台,在 18 个国家/地区开展业务。他们拥有复杂的数字基础架构,拥有超过 1 亿活跃用户,并提供各种服务,包括购物平台、付款服务 (Mercado Pago) 和物流服务。

Mercado Libre 拥有 40 多个网域,其中许多网域过去一直依赖第三方 Cookie 来实现跨网站用户身份验证和欺诈检测等功能。

Mercado Libre 进行了大量工作,找出了可能依赖于第三方 Cookie 的关键用户体验和功能。他们研究和实现了第三方 Cookie 替代方案(包括 Privacy Sandbox API),这有助于确保其媒体资源能按预期运行,并在第三方 Cookie 可用与不可用的情况下继续为用户提供良好体验。

请继续阅读,了解 Mercado Libre 如何减少对第三方 Cookie 的依赖并保护客户的隐私。

Mercado Libre 考虑了第三方 Cookie 使用情况的三个方面:

  1. Mercado Libre 是否依赖于在其网域之间共享跨网站 Cookie?
  2. 他们作为第三方提供的服务是否依赖于第三方 Cookie?
  3. 如果无法使用第三方 Cookie,他们依赖的任何第三方服务会受到影响吗?

由于涉及的业务部门众多,因此需要采用协调一致的方法来评估第三方 Cookie 对如此规模的数字媒体资源的影响。

Mercado Libre 前端平台团队负责开展影响审核,并为其他团队提供集中沟通和支持。这包括提供资源和培训,以确保公司上下了解必要的变更,以便所有团队都能采用新做法。

Mercado Libre 的各个业务部门各自在不同的网域中运营,例如 mercadolibre.commercadopago.commercadoshops.com

通过进行详细的审核,他们发现跨网站 Cookie 共享对其生态系统中的用户体验至关重要:

  • 用户身份验证:18 个国家/地区的 7,500 万月活跃买家中的部分买家可能会受到影响。
  • 内部分析:超过 4,000 名业务分析师依赖于跨网站数据来制定决策。可能会对用户体验历程跟踪产生影响。
  • 防范欺诈:在第三方 Cookie 不可用时,对于安全的付款流程至关重要(Mercado Libre 每秒超过 50 笔购买交易,Mercado Pago 每秒超过 244 笔交易)。

这项全面分析包含团队、所有者、业务影响、用例说明、当前行为、潜在破坏情况和建议的 Privacy Sandbox 解决方案等信息。

Mercado Libre 中的分区 Cookie

借助分区 Cookie(也称为 CHIPS),开发者可以选择将 Cookie 存储在分区存储空间中,每个顶级网站都有单独的 Cookie Jar。

使用 CHIPS 实现无需第三方 Cookie 的欺诈检测

挑战

Mercado Libre 使用第三方 Cookie 为访问其付款平台的用户提供顺畅的体验,无论是直接在平台上进行的付款,还是使用 Mercado Pago 作为付款处理方的透明集成,均是如此。例如,他们会在机制中使用第三方 Cookie,以帮助识别信用卡是在用户已知的设备上使用,从而防止信用卡欺诈。

设备信息是 Mercado Libre 机器学习模型用于确定是否批准付款的主要数据信号之一。因此,如果没有为大量用户提供此类信息,其付款审批率可能会大幅下降。

解决方案

为了解决第三方 Cookie 的局限性,Mercado Libre 测试了 CHIPS,这是一种解决方案,可为与其付款平台集成的每个网站设置唯一的 Cookie。目标是让 Mercado Libre 能够为每个商店维护多条信息。

在本例中,CHIPS 帮助 Mercado Libre 为回访客户提供顺畅高效的体验,即使第三方 Cookie 被屏蔽也是如此。

技术层面的深入探讨

将 Mercado Pago 用作付款处理服务的最常见集成方法是使用同时包含卡数据令牌化模块和欺诈防范模块的 JavaScript。防欺诈模块利用第三方 Cookie 将付款与用户的设备相关联。

过去,Mercado Pago 通过使用第三方 Cookie,可以在各个商店中识别和跟踪用户的设备,如下图所示。

Mercado Pago 过去使用的非分区方案。
Mercado Pago 过去使用的非分区方案。

现在,借助分屏 Cookie,Mercado Libre 可以为每个顶级网站设置单独的 Cookie,从而维护设备识别功能。如以下图片所示,此方法可保护隐私,因为它限制了在各个商店之间共享信息。当第三方 Cookie 不可用时,系统会使用分区 Cookie。这会限制在各个商店之间共享信息,从而更好地保护用户隐私。

分区 Cookie,目前由 Mercado Libre 使用。
分区 Cookie,目前由 Mercado Libre 使用。

早期开发

首先,Mercado Libre 在 Chrome 上停用了第三方 Cookie,并验证了其 Cookie 未在 Mercado Libre 作为第三方提供商的网站上成功设置。然后,Mercado Libre 更新了这些 Cookie 以进行分区。经过这项更改,他们能够确认,即使用户停用了第三方 Cookie,也可以在 Chrome 中设置分区 Cookie。然后,Mercado Libre 按照 CHIPS 安全设计说明添加了 Set-Cookie 标头,并且没有遇到任何错误。

提高业务效率

Mercado Libre 已开始使用 CHIPS 来集成 Mercado Pago 和使用自定义域名的 Mercado Shops。Mercado Libre 现在会在用户设备上存储一个额外的分区 Cookie 以及一个标准的非分区 Cookie。

为 Mercado Libre 实现 CHIPS 非常简单。

测试 CHIPS 在机器学习欺诈模型中的有效性

Mercado Libre 计划停止向对照组发送标准的未分区 Cookie 信号,以模拟第三方 Cookie 被屏蔽的情况,并改用分区 (CHIPS) Cookie。最初,此对照组将包含网站用户的一部分,而 Mercado Libre 打算在测试效果时逐步增加对照组的比例和网站数量。

效果将根据对照组的付款审批情况与前一相似时间段进行比较来衡量。

早期实验

Mercado Libre 对对照组进行了类似的实验,以检查他们能否使用 CHIPS(而非未分区的 Cookie)识别同一设备,并衡量设备(Cookie)的年龄。

对照组由阿根廷和巴西的目标商家组成;这两个组的表现相同。

总而言之,Mercado Libre 可以确认使用 CHIPS 的约 70% 设备的身份,这意味着其余 30% 的设备要么是新用户,要么是出现意外行为的情况。

CHIPS 实现结论

Mercado Libre 致力于保护用户隐私,即使在隐私保护和尽可能减少用户摩擦之间需要做出权衡也是如此。CHIPS 的实现非常简单,有助于最大限度地减少这种权衡对同一网站的影响。Mercado Libre 仍在探索其他 Privacy Sandbox 解决方案,例如私密状态令牌,这可能会完全消除体验差距,从而兼顾隐私保护和实用性。

相关网站集 (RWS) 是一种公司声明网站之间关系的方式,以便浏览器允许出于特定目的进行有限的第三方 Cookie 访问。

挑战

当新设备进入 Mercado Libre 自有自营 (O&O) 网域之一时,Meli 会使用 Cookie 了解设备在各种网域(例如 mercadolibre.com 和 mercadopago.com)上的活动。

解决方案

为了应对第三方 Cookie 不可用的情况,Mercado Libre 为其使用第三方 Cookie 的所有面向客户的网域实现了 RWS,并遵循了单个集合中包含一个主网域和其他五个关联网域的限制。

技术层面的深入探讨:查找要添加的正确网域

在调查要将哪些网域纳入该集合时,Mercado Libre 发现其许多网域都包含已过时且不再使用的 Cookie。这些网域已从该集合中排除。

网站前端平台团队负责创建和管理 Mercado Libre 的相关网站集。(您可以在“相关网站集”GitHub 代码库中找到完整的集合。)

 {
      "contact": "infraestructura@mercadolibre.com",
      "primary": "https://mercadolibre.com",
      "associatedSites": [
        "https://mercadolivre.com",
        ...
      ],
      "rationaleBySite": {
        "https://mercadolivre.com": "Mercado Libre in Brazil",
        ...
      },
      "ccTLDs": {
        "https://mercadolibre.com": [
          "https://mercadolibre.com.ar",
     ...
        ],
        "https://mercadolivre.com": [
          "https://mercadolivre.com.br"
        ],
        ...
      }
    },

提交内容获得批准后,该套装仅用了两周时间就正式上线。

要求

为了让服务器设置 Cookie,它必须支持 CORS,并且请求必须是跨源的,并且包含凭据:

res.setHeader('Access-Control-Allow-Credentials', 'true');
res.setHeader('Access-Control-Allow-Origin', `${req.headers.origin}`);

必须使用以下内容配置 Cookie:

  • Secure
  • SameSite=None

当第三方 Cookie 默认不可用时,客户端必须检查它是否有权使用 navigator.permissions.query() 访问未分区的 Cookie,然后使用 requestStorageAccessFor() 为每个嵌入网域请求存储访问权限。此外,用户与屏幕的互动(例如点击或键盘操作)对于用户代理首次成功请求权限至关重要。

克服 RWS 方面的挑战

由于需要用户互动,现有的 Cookie 传播流程(例如图片像素)和使用 Storage Access API 都存在限制。Mercado Libre 的跨网域用户永久登录就是如此,当用户选择停用第三方 Cookie 时,这种登录会中断。

相关网站集和 Privacy Sandbox 技术并非旨在提供与第三方 Cookie 一对一替代方案,并且可能不支持某些用例:

  • 图片像素

    • Mercado Libre 可以添加 crossorigin="use-credentials" 属性。不过,由于需要用户互动(用户点击链接),因此 Mercado Libre 无法确保 Cookie 会设置。如果在屏幕之间发生导航,像素也会被取消:当 Chrome 检测到导航时,会取消当前页面的所有资源请求,以开始加载新页面。
  • sendBeacon()

    • 无法配置 crossorigin,因此请求会失败,并且系统不会发送 Cookie。
  • 使用 sendBeacon() 或图片像素的重定向

    • 由于这些 Cookie 依赖于用户互动,因此无法通过重定向到执行 JavaScript 的不同网域之间的中间页面来设置 Cookie。

WebView 限制

Permissions API 在 WebView 中不可用。这迫使 Mercado Libre 实现了逻辑,即仅在 Permissions API 可用的情况下启动 Storage Access API(WebView 除外)。此外,Safari 或 Firefox 目前不支持 requestStorageAccessFor()

无论平台如何,Mercado Libre 都会根据需要继续使用特征检测。

通用解决方案

Mercado Libre 需要使用 fetch(){keepalive: true, credentials: 'include'}。这样,他们就可以配置 CORS、添加凭据,并确保在后台发出请求,而不会被浏览器取消。

fetch(domain, {
  keepalive: true,
  credentials: 'include',
});

// or

fetch(domain, {
  method: 'POST'
  body: data,
  keepalive: true,
  credentials: 'include',
});

完整示例:

const TP_DOMAINS = ['https://mercadolibre.com',
                   'https://www.mercadoshops.com.ar',
                   'https://www.mercadopago.com',
                   'https://www.mercadopago.com.ar'];

if ('requestStorageAccessFor' in document) {
   // Check the permission to see if storage access is already available.
   let storageAccessPermission = await navigator.permissions.query({
       name: 'top-level-storage-access',
       requestedOrigin: TP_DOMAINS[0]
   })

   // If the permission has already been granted, request storage access.
   if (storageAccessPermission.state === 'granted') {
       requestStorageAccessForDomains();
   }

   // If the state "prompt" is returned, a storage access request must be triggered by user gesture.
   else if (storageAccessPermission.state === 'prompt') {
       document.addEventListener('click', requestStorageAccessForDomains, { capture: true });
       document.addEventListener('keydown', requestStorageAccessForDomains, { capture: true });
   }
} else {
   console.log('requestStorageAccessFor is not supported');
}

function requestStorageAccessForDomains() {
   // Request storage access for each domain.
   TP_DOMAINS.forEach(rSAFor)

   // Clean up listeners so they are not called again.
   document.removeEventListener('click', requestStorageAccessForDomains);
   document.removeEventListener('keydown', requestStorageAccessForDomains);
}

function rSAFor(domain) {
   document.requestStorageAccessFor(domain).then(
       success => { setCookie(domain); },
       err => { console.log('requestStorageAccessFor error: ' + err); }
   );
}

function setCookie(domain) {
   const url = new URL(domain);
   const hostname = url.hostname.split('.').slice(1).join('.');
   fetch(domain + '/pixel.gif?name=_d2id&value=DONE&max_age=94608000&domain=.' + hostname, {
       keepalive: true,
       credentials: 'include',
   });
}

在 Chrome 中进行测试

您可以通过设置 Chrome 标志在本地测试相关网站集。例如,对于 related-website-sets.glitch.me 上的演示:

--use-related-website-set="{\"primary\": \"https://related-website-sets.glitch.me\", \"associatedSites\": [\"https://rws-member-1.glitch.me\"]}"
https://related-website-sets.glitch.me/

RWS 实施结论

为大型网站实现 RWS 并非易事。Mercado Libre 只需一名开发者的资源,但从开始到完成向 18 个国家/地区推出该功能的整个流程大约需要 3 个月的时间。

对于想要实现 RWS 的用户,我们的建议是:尽早开始!请立即实施 RWS。Mercado Libre 不得不更改服务器端和客户端的 Cookie、添加新标头、进行后端更改并更新 JavaScript。

结束语和后续步骤

Mercado Libre 成功实现 Privacy Sandbox API,表明他们致力于适应不断变化的隐私保护环境。通过主动测试和解决第三方 Cookie 使用问题,Mercado Libre 保留了分析和防欺诈等关键业务功能,同时加强了用户隐私保护,并确保遵守不断变化的法规。此案例研究为希望顺利过渡到第三方 Cookie 不可用的未来的组织提供了有价值的洞见。