网络隐私
人们使用网站来执行一些重要任务,例如银行业务、购物、娱乐和缴税。在执行这些任务时,他们需要与这些网站共享个人信息。用户对他们共享数据的网站有一定的信任度。如果这些信息落入坏人之手,可能会被用来利用用户,例如对用户进行画像、投放他们不感兴趣的广告,甚至盗窃他们的身份或金钱。
现代浏览器已经拥有大量保护用户网络隐私的功能,但这还不够。为了创建可信赖和尊重隐私的体验,开发人员需要教育他们的网站用户良好的做法(并执行这些做法)。开发人员还应该创建尽可能少地收集用户数据的网站,负责任地使用数据,并安全地传输和存储数据。
在本文中,我们
- 定义隐私和相关重要术语。
- 检查自动保护用户隐私的浏览器功能。
- 研究开发人员可以做些什么来创建尊重隐私的网页内容,从而最大程度地降低用户个人信息/数据意外被第三方获取的风险。
定义隐私术语和概念
在我们查看可用于网页上的各种隐私和安全功能之前,让我们定义一些重要术语。
隐私及其与安全的关系
很难谈论隐私而不谈论安全——它们密切相关,如果不具备良好的安全措施,你就无法真正创建尊重隐私的网站。因此,我们将定义两者。
- 隐私是指赋予用户控制其数据如何收集、存储和使用以及不将其滥用的权利。例如,你应该清楚地向你的用户传达你正在收集哪些数据、这些数据将与谁共享以及将如何使用这些数据。必须给予用户机会同意你的数据使用条款,访问你存储的所有数据,以及在他们不再希望你拥有这些数据时将其删除。你还必须遵守自己的条款:没有比以用户从未同意的 方式使用和共享他们的数据更能破坏用户信任的事情了。这不仅在道德上是错误的,而且可能违反法律。世界上许多地方现在都有保护消费者隐私权的立法(例如欧盟的 GDPR)。
- 安全是指保护私人数据和系统免遭未经授权访问的行为。这包括公司(内部)数据以及用户和合作伙伴(外部)数据。如果你制定了一项健全的隐私政策,让用户信任你,但你的安全措施薄弱,恶意方仍然可以窃取他们的数据,那么这样做就没有意义。
个人信息和私人信息
个人信息是描述用户的任何信息。例如
- 身高、性别表达、体重、头发颜色或年龄等身体特征
- 邮寄地址、电子邮件地址、电话号码或其他联系信息
- 护照号码、银行账户、信用卡、社会保险号或其他官方标识符
- 健康信息,例如病史、过敏或持续的状况
- 用户名和密码
- 爱好、兴趣或其他个人偏好
- 指纹或面部识别数据等生物识别数据
私人信息是用户不希望公开共享的任何信息,必须保密(即仅供特定授权用户访问的信息)。一些私人数据受法律保护(例如医疗数据),而另一些则更多地受个人偏好保护。
个人识别信息
继上述部分之后,个人识别信息 (PII) 是可以全部或部分用于追踪和/或识别特定人的信息。例如,如果一个网站泄露了用户姓名和邮政编码的列表,黑客几乎肯定可以利用这些信息找到他们的完整地址。即使没有发生全面泄露,仍然可以通过不太明显的方式识别用户,例如他们使用的浏览器、他们使用的设备、他们安装的特定字体等等。
跟踪
跟踪是指记录用户在许多不同网站上的活动的进程。这可以通过多种方式实现,例如
- 查看多个 第三方 Cookie(这些 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 由服务器使用,让他们通过让网站告诉客户端只能使用 HTTPS 与服务器通信来保护自己免遭协议降级和 Cookie 劫持攻击。
- 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 存储 或 IndexedDB 数据)。例如,你可能会让你的服务器在“注销确认”页面上发送它,以便用户注销后,其数据会安全地删除。
减少跟踪
前面我们讨论了跟踪以及用于跟踪的一些不道德目的。我们不应该说出这种使用如何会损害用户信任;在可能的情况下,你应该只将 第三方 cookie 等潜在跟踪机制用于道德目的,例如跨网站传输登录或其他个性化状态。
还请回想一下,前面提到浏览器默认情况下已开始阻止第三方 cookie,同时实施替代技术以实现常见的用例。最好为此做好准备,限制你依赖的跟踪活动数量,和/或以其他方式实施所需的信息持久性。有关详细信息,请参阅 从第三方 cookie 过渡。
谨慎管理第三方资源
当然,如果你只担心自己创建的资源(代码、cookie、网站等),那么管理隐私将很容易。真正的挑战来自你的网站很可能使用第三方资源这一事实。这可能包括嵌入在 <iframe>
中的第三方内容、库、框架、API、外部托管的资源(例如图像和视频)等。
第三方资源是现代 Web 开发的重要组成部分,它们提供了强大的功能。但是,你允许进入你的网站的任何第三方资源都可能拥有与你的资源相同的权限;这完全取决于它是在你的网站上还是在另一个网站上包含的。
- 在你的网站上通过
<iframe>
嵌入的第三方内容中运行的 JavaScript 由 同源策略 隔离,这意味着它无法访问顶级浏览上下文中包含的其他脚本和数据。 - 但是,通过
<script>
元素直接包含在你的页面中的第三方脚本将能够访问你的其他脚本和数据,无论它是托管在你的网站上还是其他网站上。它实际上是第一方代码。以这种方式包含的恶意脚本可以秘密窃取用户的资料,例如将其发送到第三方服务器。
重要的是要审计你在你的网站上使用的所有第三方资源。确保你知道它们收集了哪些数据,它们向谁发出了哪些请求以及它们的隐私政策是什么。如果你使用违反了你的隐私政策的第三方脚本,那么你精心设计的隐私政策将毫无用处。
注意:有各种工具可以帮助你了解网站发出了哪些请求,例如 Request Map Generator。
审计完你的第三方资源并了解它们的操作后,你应该考虑它们的缺点作为它们带来的价值的权衡。如果第三方脚本是免费且非常有用,但会收集大量用户数据,那么你可以
- 接受这种权衡,更新你的隐私政策以包含有关它的详细信息,并希望它不会对用户的信任造成太大影响。
- 寻找替代的、数据量更少的第三方工具。
- 构建你自己的工具。
以下列表提供了一些关于如何减轻使用第三方资源所固有的隐私风险的提示
- 嵌入第三方资源时,请考虑是否可以通过更少的隐私影响来实现相同或类似的效果。例如,在你的网站上嵌入社交媒体帖子查看器可能很有趣,但这真的有必要吗?链接到你的社交媒体页面是否就足够了?此外,一些第三方服务具有增强隐私的选项。例如,请参阅 YouTube 的 嵌入视频和播放列表 > 启用隐私增强模式。
- 在可能的情况下,你应该阻止第三方在向它们发出请求时收到
Referer
标头。这可以通过相当细致的方式来完成,例如通过在外部链接上包含 rel="noreferrer"。或者,你可以在页面或网站上更全局地设置它,例如使用Referrer-Policy
标头。注意:另请参阅 Referer 标头:隐私和安全问题。
- 使用
Permissions-Policy
HTTP 标头来控制对 API“强大功能”(例如通知、地理位置数据、访问来自网络摄像头的媒体流等)的访问。这对隐私很有用,因为它可以阻止第三方网站对这些功能执行意外的操作,并且用户不希望被不必要的权限提示所困扰,因为他们可能不理解这些提示。你还可以通过在<iframe>
本身上指定allow
属性中的权限策略来控制嵌入在<iframe>
元素中的第三方网站内“强大功能”的使用情况。注意:有关更多信息和示例,请参阅我们的 权限策略指南,以及 permissionspolicy.com,以获取包括策略生成器在内的有用工具。
- 使用
<iframe>
sandbox
属性允许或禁止在嵌入在<iframe>
中的内容中使用某些功能——这包括下载、表单提交、模态和脚本等。
注意:有关审核和其他有用信息的更多信息,请参阅 web.dev 上的 第三方。
保护用户数据
收集用户数据后,您需要确保以安全的方式传输和存储用户数据。这更多地是一个 安全 主题,但在这里值得一提——如果您的安全性很松懈,攻击者可以从您那里窃取数据,那么良好的隐私策略就毫无用处。
以下提示提供了一些关于保护用户数据的指导
- 安全性很难做到。在实施涉及数据收集的安全解决方案时——特别是如果它是敏感数据,例如登录凭据——使用来自信誉良好的提供商的信誉良好的解决方案是有意义的。例如,任何值得信赖的服务器端框架都将具有内置的功能来防御常见的漏洞。您也可以考虑使用针对您的目的的专用产品——例如身份提供者解决方案或安全的在线调查提供商。
- 如果您想推出自己的用户数据收集解决方案,请确保您了解自己在做什么。聘请经验丰富的服务器端开发人员和/或安全工程师来实施该系统,并确保对其进行彻底测试。使用多因素身份验证 (MFA) 来提供更好的保护。考虑使用专用 API,例如 Web Authentication 或 Federated Credential Management 来简化应用程序的客户端。
- 在收集用户注册信息时,请强制使用强密码,以便您的用户帐户详细信息无法轻易被猜到。弱密码是导致安全漏洞的主要原因之一。鼓励您的用户使用密码管理器来生成和存储复杂密码;这样,他们就不必担心记住密码,也不必因记下密码而造成安全风险。
- 不要在 URL 中包含敏感数据——如果第三方拦截 URL(例如通过
Referer
标头),他们可能会窃取该信息。使用POST
请求而不是GET
请求来避免这种情况。 - 考虑使用 内容安全策略 和 权限策略 等工具来对您的网站实施一组功能使用规则,从而更难引入漏洞。在执行此操作时要小心——如果您阻止了第三方脚本依赖的功能的使用,您最终可能会破坏网站的功能。您可以在审核第三方资源时对此进行调查(请参阅 仔细管理第三方资源)。