网络隐私
人们使用网站来完成一些重要任务,如银行业务、购物、娱乐和纳税。在此过程中,他们需要与这些网站分享个人信息。用户对他们分享数据的网站给予了一定程度的信任。如果这些信息落入坏人之手,可能会被用来剥削用户,例如对他们进行用户画像分析、用不必要的广告骚扰他们,甚至窃取他们的身份或金钱。
现代浏览器已经具备了丰富的特性来保护用户的网络隐私,但这还不够。为了创造一个值得信赖且尊重隐私的体验,开发者需要教育他们的网站用户养成良好习惯(并强制执行)。开发者还应该创建尽可能少地收集用户数据的网站,负责任地使用数据,并安全地传输和存储数据。
在本文中,我们将:
- 定义隐私及相关重要术语。
- 审视能自动保护用户隐私的浏览器特性。
- 探讨开发者可以如何创建尊重隐私的网页内容,以最大限度地降低用户的个人信息/数据被第三方意外获取的风险。
定义隐私术语和概念
在我们探讨网络上各种可用的隐私和安全特性之前,让我们先定义一些重要的术语。
隐私及其与安全的关系
谈论隐私很难不涉及安全——它们密切相关,没有良好的安全性,你就无法真正创建尊重隐私的网站。因此,我们将对两者都进行定义。
-
隐私是指赋予用户控制其数据如何被收集、存储和使用的权利,并且不被不负责任地使用。例如,你应该清楚地告知用户你正在收集哪些数据、这些数据将与谁共享以及将如何使用。用户必须有机会同意你的数据使用条款,能够访问你存储的他们所有的数据,并且如果他们不再希望你拥有这些数据,可以将其删除。你也必须遵守自己的条款:没有什么比用户数据在未经他们同意的情况下被使用和共享更能侵蚀用户信任了。这不仅在道德上是错误的,还可能违法。世界上许多地区现在都有保护消费者隐私权的法律(例如欧盟的 GDPR)。
-
安全是指保护私人数据和系统免受未经授权的访问。这包括公司(内部)数据,以及用户和合作伙伴(外部)数据。如果你的安全性很弱,恶意方仍然可以窃取用户数据,那么拥有一个让用户信任你的健全的隐私政策也毫无用处。
个人信息和私密信息
个人信息是任何描述用户的信息。例如:
- 邮政地址、电子邮件地址、电话号码或其他联系信息
- 护照号码、银行账户、信用卡、社会安全号码或其他官方标识符
- 身高、性别表达、体重、发色或年龄等身体特征
- 病史、过敏或现有疾病等健康信息
- 可以关联到个人的用户名
- 爱好、兴趣或其他个人偏好
- 指纹或面部识别数据等生物特征数据
私密信息是用户不希望公开分享且必须保密的任何信息(即,只有某一组授权用户才能访问的信息)。一些私密数据是法律规定的私密信息(例如医疗数据),而另一些则更多是出于个人偏好。
个人可识别信息
承接上一节,个人可识别信息(PII)是指可以全部或部分用于追踪和/或识别特定个人的信息。例如,如果一个网站在线泄露了用户的姓名和邮政编码列表,不法分子几乎肯定可以利用这些信息找到他们的完整地址。即使没有发生大规模泄露,仍然有可能通过一些不那么明显的方式来识别用户,比如他们使用的浏览器、设备、安装的特定字体等等。
跟踪
跟踪指的是记录用户在多个不同网站上的活动的过程。这可以通过多种方式实现,例如:
- 查看在嵌入了第三方内容的不同网站上设置的多个第三方 Cookie,以获取关于用户的各种信息点。
- 查看
Referer标头,以了解用户从哪里导航而来。 - 在入站链接的 URL 中包含参数(例如,在链接到产品页面的嵌入式广告或营销邮件中),这些参数可以向链接到的网站揭示链接的来源、所属的营销活动、点击链接的用户的电子邮件地址或其他标识符等。这个过程被称为链接装饰,产生的链接 URL 如下所示:
https://example.com/article/?id=62yhgt1a&campaign=902。 - 重定向跟踪,即跟踪器短暂地(且不易察觉地)将用户重定向到其网站,以利用第一方存储来跨网站跟踪该用户。这使得跟踪器能够绕过第三方 Cookie 被阻止的情况。例如,如果你读完一篇产品评测并想点击购买,你可能会在不知不觉中先导航到重定向跟踪器,然后再到零售商。这意味着跟踪器作为第一方被加载,可以在将你转发到零售商之前,将跟踪数据与其存储在第一方 Cookie 中的标识符关联起来。
跟踪数据可用于构建用户的画像以及他们的兴趣和偏好,这通常是不好的,并且会在不同程度上令人烦恼。例如:
- 定向广告:每个人都有过这样的不安经历:在一台设备上研究了一些要购买的商品,然后突然在所有其他设备上被同样产品的广告轰炸。
- 出售或共享数据:一些第三方被发现会汇编跟踪数据,然后将其出售/分享给他人用于各种目的,如定向广告。这显然是极不道德的,并且根据发生地点的不同,也可能是非法的。
- 通过数据产生偏见:在最坏的情况下,共享数据可能导致用户受到不公平的对待。例如,想象一家保险公司发现了某个潜在客户未同意分享的数据点,并以此为理由提高其保险费。
指纹识别
与跟踪密切相关的一个过程是指纹识别:这特指通过收集一系列关于用户的数据点来识别用户,从而将他们与其他用户区分开来。这可以是任何信息,从 Cookie 内容到他们使用的浏览器以及本地安装的字体。
现代浏览器采取措施帮助防止基于指纹识别的攻击,要么不允许访问信息,要么在必须提供信息时引入变化或“噪声”,以防止其被用于识别目的。
例如,如果一个网站向用户的浏览器查询已用时间,将该时间与服务器报告的时间进行比较可能有助于指纹识别。因此,浏览器通常会为计时器引入少量可变性,以降低其在识别用户系统方面的作用。
注: 请参阅 web.dev 上的指纹识别以获取更多有用信息。
浏览器提供的隐私特性
浏览器供应商意识到保护用户隐私的必要性,以及跟踪、指纹识别等对用户体验的负面影响。为此,他们实施了各种增强隐私保护和/或减轻威胁的功能。在本节中,我们将探讨浏览器自动应用的不同类别的隐私保护措施。
默认使用 HTTPS
传输层安全性(TLS)通过在网络传输过程中加密数据来提供安全和隐私,是 HTTPS 协议背后的技术。TLS 有利于隐私,因为它能阻止第三方截获传输的数据并恶意使用,例如用于跟踪。
所有浏览器都在朝着默认要求 HTTPS 的方向发展;这实际上已经成为现实,因为没有这个协议,你在网络上能做的事情就很少了。
相关主题如下:
- 证书透明度
-
一个用于监控和审计证书的开放标准,创建了一个公共日志数据库,可用于帮助识别不正确或恶意的证书。
- HTTP 严格传输安全 (HSTS)
-
HSTS 被服务器用来保护自己免受协议降级和 Cookie 劫持攻击,它允许网站告知客户端只能使用 HTTPS 与服务器通信。
- HTTP/2
-
虽然 HTTP/2 在技术上并不必须使用加密,但大多数浏览器开发者仅在与 HTTPS 一起使用时才支持它;因此,从这个角度看,它可以被视为一个增强安全/隐私的特性。
“强大功能”需用户选择加入
那些提供对潜在敏感数据和操作访问权限的所谓“强大”的 Web API 功能,仅在安全上下文中可用,这基本上意味着仅限 HTTPS。不仅如此,这些 Web 功能还受到用户权限系统的限制。用户必须明确选择加入诸如允许通知、访问地理位置数据、使浏览器进入全屏模式、访问网络摄像头的媒体流、使用 Web 支付等功能。
反跟踪技术
浏览器已经实现了多种反跟踪功能,自动增强其用户的隐私保护。其中许多功能会阻止或限制嵌入在 <iframe> 中的第三方网站访问顶级域名上设置的 Cookie、运行跟踪脚本等。
Set-Cookie标头的SameSite属性的默认值已更新为Lax,以提供更好的保护,防止跟踪和 CSRF 攻击。更多信息请参阅使用SameSite控制第三方 Cookie。- 浏览器都已开始默认阻止第三方 Cookie。更多详情请参阅浏览器如何处理第三方 Cookie?
- 浏览器正在实施一些技术,只在某些不损害隐私的情况下允许第三方 Cookie,或者以替代方式实现当前需要第三方 Cookie 的常见用例。请参阅从第三方 Cookie 过渡和替代第三方 Cookie。
- 一些浏览器会从 URL 中剥离已知的跟踪参数——这包括 Firefox、Safari 和 Brave。浏览器扩展程序也有助于实现这一点,例如 ClearURLs。
- 浏览器已实现重定向跟踪保护。
客户端开发者的隐私注意事项
Web 开发者可以而且应该采取一些措施来改善用户的隐私。以下章节讨论了其中最重要的几项。其中一些类别并非纯粹的技术任务,需要与其他团队成员合作。
合乎道德地收集数据
公司出于各种原因从用户那里收集大量不同的数据:
- 用户名、密码、电子邮件等,用于身份验证。
- 电子邮件、邮政地址和电话号码,用于通信。
- 年龄、性别、地理位置、最喜欢的消遣以及大量其他个人可识别信息(PII),用于从网站个性化到客户满意度调查等各种目的。
- 在他们自己和其他网站上的浏览习惯,用于衡量页面和功能的成功指标。
- 以及更多。
在向客户收集数据时,你有机会表现出诚信,向他们展示你的可信赖性,并与他们建立良好的关系,从而提升你的品牌和成功机会。
数据收集的道德准则可以归结为三个简单的原则:
- 不要收集超出需求的数据
- 清晰地说明你将如何使用收集到的数据
- 使用完毕后删除数据
注: 下面提供的技巧可以带来更好、更注重隐私的用户体验,但其中许多是法律要求,以符合法规,例如欧盟的 GDPR。你应该确保了解你所在地区适用的法规,以及你需要做什么来遵守它们。
不要收集超出需求的数据
向用户索取大量数据是很诱人的,因为你认为将来可能会有用。然而,你收集的每一份额外数据都会增加用户隐私的风险,并增加他们放弃当前操作(无论是填写调查问卷还是注册服务)的可能性。
匿名化数据是个好办法。你还应该考虑是否可以通过降低数据请求的粒度来获得所需的信息。例如,你可以询问用户选择更笼统的类别,而不是询问他们最喜欢的产品。
不过,保护用户隐私的最佳方式是最大限度地减少你收集的数据。回到前面的例子,你可以通过查看用户的购买历史来推断出相同的数据。再举一个例子,用户喜欢能够匿名购买产品。你不应该强迫他们注册账户;如果这对服务运行不是必需的,那么这应该是他们的选择。
清晰地说明你将如何使用收集到的数据
一旦你决定了要收集哪些数据,你应该在你的网站上发布一份隐私政策,清楚地说明:
- 你收集的数据
- 你使用数据的方式
- 你可能与之共享数据的各方(如有),并声明在共享前会征求用户同意
- 你在删除数据前保留数据的时间
- 用户查看你从他们那里收集的数据以及在需要时删除数据的方式
在向你提供数据时,你的用户应该有机会阅读你的隐私政策并同意它。他们应该能够控制自己是否满意并同意你的条款。并且如上所述,他们也应该能够看到你收集了他们的哪些数据,并可以在需要时删除它。
当你发布了你的隐私政策后,你需要确保你遵守它——言行一致对于建立用户信任非常重要。你应该只收集你声明会收集的数据,并且只用于你声明会使用的目的。如果公司里有人想出了一个巧妙的新方法来使用现有数据,但如果你的政策没有明确说明你会将其用于该目的,那么这在你的政策条款下仍然是不允许的。如果用户同意将其数据用于特定目的,而该目的后来扩大了,你可能需要考虑获得新的同意。
使用完毕后删除数据
前面我们提到,要让用户能够查看你收集了他们的哪些数据,并可以在需要时删除。你或许可以将其作为他们删除账户体验的一部分(他们的数据也随之删除),或者将它们作为两个独立的选项。无论哪种方式,这些选项都应该易于找到。
允许用户选择何时删除大部分数据是非常有赋权的,并且能够建立信任,但可能有一些数据你会希望自己处理删除。例如,有些数据可能只使用几个小时或几分钟然后就被删除,比如用户登录期间管理会话时使用的数据。
注:Clear-Site-Data HTTP 响应标头对于清除短期的用户数据非常有用——它指示浏览器清除其缓存和/或 Cookie 和/或存储(例如,Web Storage 或 IndexedDB 数据)。例如,你可以在“已登出确认”页面上让服务器发送这个标头,这样一旦用户登出,他们的数据就会被安全地移除。
减少跟踪
前面我们讨论了跟踪,以及它被用于的一些不道德的目的。我们不必详细说明这种用法如何侵蚀用户信任;在任何可能的情况下,你都应该只将像第三方 Cookie这样的潜在跟踪机制用于合乎道德的用途,例如在网站之间传递登录或其他个性化状态。
还记得前面提到过,浏览器都开始默认阻止第三方 Cookie,同时实施替代技术来实现常见的用例。为此做好准备是个好主意,方法是限制你所依赖的跟踪活动数量,和/或通过其他方式实现所需的信息持久化。更多信息请参阅从第三方 Cookie 过渡。
谨慎管理第三方资源
当然,如果你只关心自己创建的资源(代码、Cookie、网站等),管理隐私会很容易。真正的挑战在于你的网站很可能会使用第三方资源。这可能包括嵌入在 <iframe> 中的第三方内容、库、框架、API、外部托管的资源(如图片和视频)等。
第三方资源是现代 Web 开发的重要组成部分,它们提供了强大的功能。然而,你允许进入网站的任何第三方资源都可能拥有与你自己的资源相同的权限;这完全取决于它如何被包含在你的网站中:
- 通过
<iframe>嵌入到你网站的第三方内容中运行的 JavaScript 受同源策略的隔离,这意味着它无法访问顶级浏览上下文中包含的其他脚本和数据。 - 然而,通过
<script>元素直接包含在你页面中的第三方脚本,则可以访问你的其他脚本和数据,无论它托管在你的网站还是其他网站上。它实际上等同于第一方代码。以这种方式包含的恶意脚本可能会秘密窃取你的用户数据,例如将其发送到第三方服务器。
审计你在网站上使用的所有第三方资源非常重要。确保你了解它们收集了哪些数据、它们向谁发出了哪些请求,以及它们的隐私政策是什么。如果你使用的第三方脚本违反了你精心设计的隐私政策,那么你的政策将毫无用处。
注: 有各种工具可以帮助你了解一个网站正在发出哪些请求,例如请求地图生成器。
在审计了你的第三方资源并了解了它们的作用后,你应该权衡它们的负面影响与它们带来的价值。如果一个第三方脚本是免费且非常有用,但收集了相当多的用户数据,你可以:
- 接受这种权衡,更新你的隐私政策以包含相关细节,并希望这不会对用户的信任产生太大影响。
- 寻找一个替代的、数据收集较少的第三方工具。
- 自己构建一个工具。
以下列表提供了一些关于如何减轻使用第三方资源所固有的隐私风险的技巧:
-
在嵌入第三方资源时,考虑是否有办法以较小的隐私影响实现相同或相似的效果。例如,在你的网站上嵌入一个社交媒体帖子查看器可能很有趣,但这真的有必要吗?一个指向你社交媒体页面的链接是否足够?此外,一些第三方服务提供增强隐私的选项。例如,请参阅 YouTube 的嵌入视频和播放列表 > 开启隐私增强模式。
-
在可能的情况下,当你向第三方发出请求时,应阻止他们接收
Referer标头。这可以以相当精细的方式实现,例如在外部链接上包含 rel="noreferrer"。或者,你可以为页面或网站更全局地设置,例如使用Referrer-Policy标头。注: 另请参阅Referer 标头:隐私和安全问题。
-
使用
Permissions-PolicyHTTP 标头来控制对 API“强大功能”(如通知、地理位置数据、访问网络摄像头媒体流等)的访问。这对于隐私很有用,因为它能阻止第三方网站对这些功能进行意外操作,而且用户也不希望被他们可能不理解的权限提示不必要地轰炸。你还可以通过在<iframe>元素自身的allow属性中指定权限策略来控制嵌入在<iframe>元素内的第三方网站中“强大功能”的使用。注: 更多信息和示例,请参阅我们的Permissions-Policy 指南,以及 permissionspolicy.com 上有用的工具,包括一个策略生成器。
-
使用
<iframe>的sandbox属性来允许或禁止在<iframe>中嵌入的内容中使用某些功能——这包括下载、表单提交、模态框和脚本等。
注: 请参阅 web.dev 上的第三方以获取有关审计等的更多有用信息。
保护用户数据
你需要确保用户数据在收集后能够安全地传输和存储。这更像是一个安全话题,但在这里值得一提——如果你的安全性松懈,攻击者可以窃取数据,那么一个好的隐私政策也毫无用处。
以下提示为保护用户数据提供了一些指导:
- 安全很难做到万无一失。在实施涉及数据收集的安全解决方案时——尤其是在涉及登录凭证等敏感数据时——使用来自信誉良好供应商的可靠解决方案是明智的。例如,任何有信誉的服务器端框架都会有内置功能来防范常见漏洞。你也可以考虑使用专门的产品来满足你的目的——例如身份提供商解决方案或安全的在线调查提供商。
- 如果你想自己推出一个收集用户数据的解决方案,确保你了解自己在做什么。聘请一位经验丰富的服务器端开发者和/或安全工程师来实施该系统,并确保其经过彻底测试。使用多因素认证(MFA)来提供更好的保护。考虑使用专门的 API,如 Web Authentication 或 Federated Credential Management 来简化应用程序的客户端部分。
- 在收集用户注册信息时,强制使用强密码,这样用户的账户信息就不容易被猜到。弱密码是安全漏洞的主要原因之一。鼓励你的用户使用密码管理器来生成和存储复杂密码;这样他们就不用担心记住密码,也不会因为写下来而造成安全风险。
- 不要在 URL 中包含敏感数据——如果第三方截获了 URL(例如通过
Referer标头),他们可能会窃取该信息。使用POST请求而不是GET请求来避免这种情况。 - 考虑使用像内容安全策略和权限策略这样的工具,来强制执行网站上的一系列功能使用规则,从而更难引入漏洞。这样做时要小心——如果你阻止了某个第三方脚本正常工作所需的功能,你可能会破坏网站的功能。这是你在审计第三方资源时可以研究的问题(参见谨慎管理第三方资源)。