Update: Stripe's Response Regarding User Tracking

Michael Lynch

更新:Stripe 对用户追踪问题的回应

原文由 Michael Lynch 发布,订阅该博客

上周,我发表了一篇博文,讲述了 Stripe 如何在其客户的网站上记录访客行为。简而言之,即使用户访问的网站从未展示过任何 Stripe 支付表单,Stripe 的 JavaScript 库也会收集用户访问过的 URL 信息以及鼠标移动的遥测数据。我推测大多数 Stripe 客户对此并不知情,并主张 Stripe 应该更显著、更详细地披露其数据收集行为。

这篇博文在 Hacker News 上引发了热烈讨论,其中包括 Stripe 联合创始人兼首席执行官 Patrick Collison 的多条评论。在他的置顶评论中,他写道:

被提出的问题(“Stripe 收集这些数据是为了投放广告吗?”)可以明确地给出否定的回答。这些数据过去没有、将来也不会被出售、出租等给广告商。

一些评论者回应说,他们感谢他的保证,但希望在 Stripe 的服务条款隐私政策中看到具有正式约束力的表述。

我的文章发布还不到一周,Stripe 就发布了一篇博文,概述了他们为更充分地披露数据收集做法、并就用户隐私作出保证而采取的改进措施。

Stripe 博文截图

我已经审阅了他们更新后的文档,下面将讨论 Stripe 的这些改动在多大程度上回应了我提出的问题。

Stripe 的改动

开发者文档已明确披露追踪功能

在我看来,最重要的变化是 Stripe 的开发者文档现在披露了其 JavaScript 库的追踪行为。在昨天的改动之前,唯一的提示只有这两句话

为了最好地利用 Stripe 的高级欺诈防护功能,请确保在每个页面都加载 Stripe.js,而不仅仅是结账页面。这样 Stripe 才能在客户浏览您的网站时检测出可能表明存在欺诈的异常行为。

这段话遗漏了关键信息,既没有说明该库收集了哪些信息,也没有说明它如何将这些数据共享给 Stripe 的服务器。

在 Stripe 目前的文档中,该库新增了一个名为“禁用高级欺诈检测信号”的章节,其中链接到了一个明确定义了 Stripe 为防范欺诈而收集的信息类型的网页。

Stripe 欺诈检测文档截图

Stripe 新的欺诈检测文档对 Stripe 如何收集用户数据作出了更明确的说明。

Stripe 客户可选择关闭追踪

Stripe 更新了其 JavaScript 库,让客户可以选择退出深度数据收集。他们现在可以通过在 <script> 标签中加入 advancedFraudSignals=false 参数来禁用该功能:

<script src="https://js.stripe.com/v3/?advancedFraudSignals=false"></script>

使用@stripe/stripe-js npm 软件包的客户也可以在初始化该库时通过指定 {advancedFraudSignals: false} 来使用这一功能:

import { loadStripe } from "@stripe/stripe-js/pure";

loadStripe.setLoadParameters({ advancedFraudSignals: false });
const stripe = await loadStripe("pk_test_TYooMQauvdEDq54NiTphI7jx");

这是一个积极的改变,因为它把决定权交还给了网站所有者,让他们可以自行决定愿意用多少数据来换取更好的欺诈防护效果。

隐私政策现已明确禁止 Stripe 出售用户数据

周三,Stripe 大幅修订了其隐私政策。这些修订对 Stripe 如何处理用户数据以及如何与外部合作伙伴共享数据施加了更严格的限制。

我制作了一份隐私政策全部改动的对比视图,不过这里只重点介绍其中值得注意的部分。

  • 广告网络及出售用户数据的相关表述已被删除

在最初的博文中,我指出了 Stripe 隐私政策中这段令人担忧的内容:

当您访问我们的网站或在线服务时,我们以及某些第三方会随着时间的推移、跨不同网站收集您在线活动的信息,以便向您提供根据个人兴趣定制的产品和服务广告(这类广告被称为“基于兴趣的广告”)。

Stripe 还有一段文字授权自己与 AdWords、AdRoll 等广告合作伙伴共享数据:

我们与 Google AdWords、Doubleclick、AdRoll 及其他广告网络合作。

Stripe 已经删掉了这两段内容。新的表述清晰而直接,令人耳目一新:Stripe 不会将客户数据出售给广告商:

我们不会为基于兴趣的广告而使用、共享、出租或出售我们用户之客户的个人数据。我们不会出售或出租我们用户、其客户或我们网站访客的个人数据。

  • 即便发生公司出售,用户数据仍受保护

在 Hacker News 的讨论中,有用户表达了担忧,认为尽管 Stripe 目前用心良好,但如果 Stripe 被另一家公司收购,用户数据可能会落入不当之手。对此 Patrick Collison 回应道:

我会问问我们的法务团队,看是否可以通过合同方式禁止我们在清算等情况下共享这些数据,或是以其他有用的方式对自身加以约束……

或许正是直接回应了那次交流,新的隐私政策中加入了这样一条:

任何收购我们或我们部分业务的其他实体将有权继续使用您的个人数据,但除非您另行同意,否则只能以本隐私政策所述的方式使用。

我仍希望看到的改进

Stripe 迅速而彻底的改动让我印象深刻,但仍有一些方面我认为有待改进。我已直接向 Stripe 表达了这些关切,他们表示计划在未来加以解决。

更明确地披露 URL 收集行为

在 Stripe 专门的欺诈检测页面上,有一个名为“信号类型”的章节,解释了他们作为欺诈检测的一部分会从最终用户那里收集哪些信息。

在我的博文中,我指出 Stripe 会收集用户访问的每个页面的完整 URL,包括查询字符串(例如 example.com?userId=michael)和 URL 片段(例如 example.com#key=1234)。Stripe 至今仍未明确说明他们在收集这些信息。最接近的表述是这一段(强调为我所加):

高级欺诈检测信号还包括来自购物体验的活动指标,这些指标有助于我们区分合法购物者与欺诈性购买者和机器人……这些信号包括鼠标活动指标以及用户在购物体验中在不同页面上停留的时长,这两者都能在整个会话期间预测类似机器人的行为。

一个理性的人能从这段话推断出 Stripe 会收集完整 URL 吗?我对此表示怀疑。

也许你对那些把敏感数据存放在查询字符串中的网络应用毫无同情,因为这已被广泛认为是不安全的模式。而 URL 片段的问题则要严重得多。这本是一种安全的敏感信息存储方式,因此看到第三方库将其副本发送到外部服务器,令人不安。

Firefox SendMega.nz 都是使用 URL 片段来存储客户端加密密钥的热门网络应用的例子,这样用户就可以将端到端加密的文件保存到云端,而服务器始终无法访问底层数据。如果 Stripe 的 JS 库运行在使用类似方案的网站上,其库就会将敏感的加密密钥泄露给 Stripe 的服务器。

Mega.nz 在 URL 片段中显示加密密钥的截图

热门文件共享应用 Mega.nz 将敏感的加密密钥存储在 URL 片段字段中

支持卸载库

虽然 loadStripe 函数和/pure 导入路径让接入方有权决定何时启用 Stripe,但目前仍没有办法将 Stripe关闭

假设你想在结账流程中启用 Stripe 的高级欺诈检测,但在交易完成后又想停止与 Stripe 共享数据。目前唯一的方法是强制刷新页面

如果 Stripe 能提供一个类似 unloadStripe 的简单函数,在应用不再需要时动态禁用追踪,那就更好了。

为什么这一切很重要?

通过引入第三方 JavaScript 软件包,网站所有者对这些库赋予了极大的信任。由于能够在用户浏览器中执行代码,JavaScript 库掌握着通往一切的钥匙。它们可以访问用户能看到的所有信息,并能以用户的权限在网站上执行操作。

网站所有者有责任(在某些司法管辖区,这是一种法律责任)了解其网站直接或通过第三方库收集了哪些信息。Stripe 展现出负责任的数据管理固然是好事,但网站所有者仍须坚持主张自己有权了解外部合作伙伴收集了哪些数据、以及对方对这些数据作出了何种限制承诺。

本文章由 muse-spark-1.2-contributor 进行翻译

评论