1. 受众
本文件面向以下对象:
-
技术文档作者,希望在自己的规范或文档中复用或引用这些概念。
-
用户代理开发者,希望让实现方案符合以用户为优先的设计与隐私原则。
-
Web开发者,希望理解为何用户代理优先考虑用户隐私和安全,而不是开发者便利或其他利益相关方。
-
监管者和决策者,希望了解用户代理行为的职责、原则和预期。
2. 什么是网页用户代理
一个用户代理,一般来说,是任何代表用户与其他实体交互的软件实体。 用户代理包括许多操作系统;电子邮件客户端;PDF、电子书和图片浏览器; 凭证管理器,包括数字钱包;以及许多其他类型的软件。
一个网页用户代理是 任何代表用户与网站进行交互的软件实体,包括仅仅是展示网站内容。 在网页规范和本文件的其它部分, 网页用户代理通常被简称为“用户代理”。 如果可能产生混淆,可以使用完整术语。 一个人在日常生活中可能会使用许多不同的用户代理。
最常见的网页用户代理类型是网页浏览器, 包括能够跟随跨站链接的应用内浏览器。 不过,用户代理也包括其他工具,如 搜索引擎、语音助手,以及能呈现网站内容片段或摘要的生成式 AI 系统, 或帮助用户浏览和交互网站的系统。
用户代理的行为并非完全由网页标准 或甚至技术规范所定义。 尤其是, 用户代理会选择实现哪些规范以最好地服务其用户, 并且会在所实现规范的基础上,实施专有的用户界面和其他行为。
2.1. 用户代理作为软件组件
作为软件组件,用户代理可以是更大型应用程序的一部分, 并且可以调用实现Web平台或其部分功能的库。
当一个应用明确区分哪些部分属于用户代理 ,哪些部分不属于时, 那么只有那些用户代理部分 ——即浏览代理自身以外内容的部分, 需要遵循用户代理职责。 明确只显示应用自身内容的部分可以自行操作, 但应用仍需 让用户对应用不同部分的预期行为有清晰的认识。 如果内部与外部内容之间的区别不明显——例如 浏览外部内容时应用未显示地址栏或其他来源指示器—— 那么 应用在显示自身内容时也应遵循用户代理职责。
类似地,实现Web平台的库
可能并非完整的用户代理。
某些库,如
SFSafariViewController
和
Android Custom Tabs
承担了实现用户代理职责的责任,
并明确区分所浏览的外部内容与嵌入应用所控制的内容。
这些库属于用户代理。
其他库,如 Android、 iOS、 以及 Windows 的 WebView 库, 被设计用于支持多种不同类型的应用。 因为其中一些应用只包含自己的内容, WebView 库本身并不是用户代理, 也不实现用户代理职责。
最终,如果嵌入式应用或其任何部分作为用户代理运作,则该应用需遵守用户代理职责。 如果应用仅通过用户代理库浏览外部内容,这会很直接。 开发者在使用非用户代理的WebView实现应用内浏览器时, 更应格外注意遵循用户代理职责。
3. 用户代理的职责
每个用户代理服务于其用户(互联网属于终端用户), 而不是服务于其他利益相关方。 用户代理对其用户负有各种 职责, 这些职责应通过集体讨论确立, 并体现在用户代理实现的各类标准中。
3.1. 保护
访问网页应该是安全的。 仅仅访问网页本身, 不应允许该网页更改用户计算机或环境, 比如安装软件或访问硬件。
向站点或其他观察者暴露的任何数据 都应与用户偏好一致, 遵循数据最小化原则。 尤其是,用户代理必须采取行动 限制站点追踪用户活动的可能性 [unsanctioned-tracking]。
用户可以选择共享更多信息, 比如填写表单或授予权限。 即便如此,用户代理也必须帮助用户防止受骗,并 清晰地提示当网页试图获取更高权限时。
访问本地文件或其他敏感资源 必须限制在明确、主动的用户操作范围内,且应有适当的警告。
用户代理需要防止站点上的恶意代码 越过用户代理本身 修改用户计算机或访问其他源。 用户代理通过对组件沙盒隔离、 使用内存安全语言、 并配备安全团队响应漏洞来履行这一保护职责。 这些防护措施需要不断进化以应对新威胁。
用户代理应防止页面访问本地文件, 除非用户明确选择或打开文件。 为此,通常采取如下措施:
-
为每个
file:URL分配独立的源, -
从
<input type=file>上传表单中移除路径信息, -
限制@font-face规则可用的本地字体。
但用户依然可以选择共享文件, 如上传或下载。 File System Access 这样的API不违背此职责, 前提是用户有能力做出明智决定。
3.2. 诚信
用户代理必须在 Web 和用户之间进行调解, 以用户能够理解的方式解释正在发生的事情。
用户代理可以采用多种方法进行说明,包括 文本、权限提示、指示器、预览和其他界面元素。 需要考虑这些元素的摆放,以及是否有内容需要特别突出。
一个典型的例子是,用户代理会指示网站是否通过加密连接提供服务。 这种方式随着时间不断演变,从早期的不安全站点用破损锁图标显示, 到某些用户代理在地址栏明确显示“不安全”字样。
规范,比如 媒体捕获与流,包含了 隐私指示要求 ,要求用户代理解释网站行为中的某些具体情况, 但即使规范没有特别强调,用户代理在用户需要了解其他行为时, 也应采用同样的技术来进行说明。
一个诚实的用户代理会积极努力地向用户呈现真实情况。 它不仅仅是避免说谎。 它的说明 应该清晰展示当前状态及可能后果, 避免委婉或模糊表达, 并在出现敏感操作时明显提示。
用户代理应选择何时以及多频繁地显示这些说明, 使说明在有帮助的时候出现,起到提示而非干扰的作用。 用户代理应保证用户可以控制自己何时以及是否做出决策。
3.3. 忠诚
用户代理必须将用户权益置于实现者和其他任何方利益之上。
用户代理在收取合理报酬,且事先获得用户同意的前提下, 也可以保持忠诚。
用户代理还可以帮助用户 对网页做出可信承诺以获得对方服务, 获得服务后继续履行承诺也并不构成不忠。
用户代理不得阻碍用户切换至其他用户代理。 例如,不得阻拦、限制或以无法移植的方式存储、导出用户数据。 这包括身份信息、书签、历史记录、密码、以及诸如通行密钥等凭据。 如果用户代理依赖底层操作系统存储凭据, 就需要为用户提供授权方式让其他用户代理访问这些凭据。