在日本使用替代浏览器引擎
在 iOS 26.2 及更高版本中,日本用户可以在两类 App 中使用除 WebKit 之外的浏览器引擎:提供完整 Web 浏览器体验的专用浏览器 App,以及由浏览器引擎管理方开发、通过嵌入式浏览器引擎提供 App 内浏览体验的 App。
Apple 将向获得授权的开发者提供系统内技术的访问权限,这些技术可实现关键功能并帮助开发者提供高性能的新型浏览器引擎。这些技术包括即时编译、多进程支持等。
但是,由于浏览器引擎会经常暴露于不可信且可能存在恶意的内容中,并且可以查看敏感的用户数据,因此它们是不法分子最常用的攻击途径之一。为帮助确保用户的上网安全,仅在开发者符合特定标准并承诺满足不断变化的隐私和安全要求 (包括及时进行安全更新以应对新出现的威胁和漏洞) 的情况下,Apple 才会授权开发者实现替代浏览器引擎。
Web 浏览器引擎授权
适用于浏览器 App
获得 Web 浏览器引擎授权后,你可以在自己的浏览器 App 中使用第三方浏览器引擎。如果你想要在你的浏览器 App 中使用第三方浏览器引擎,请查看以下要求,然后提交 Web 浏览器引擎授权申请。如需技术指导,请查看:
要求
符合授权资格的 App 必须满足以下条件:
- 仅在日本的 iOS 上分发 (Apple 在开发者协议及其任何附录中明确允许的所有其他司法管辖区或 Apple 平台除外,前提是你已获得相应的授权描述文件);
- 已获得默认浏览器授权
- 满足以下功能要求以确保你的 App 使用的 Web 浏览器引擎可提供基本的 Web 功能:
- 你和你的 App 必须满足以下安全要求:
- 承诺保护开发过程,包括监控 App 的软件供应链是否存在漏洞,以及遵循有关安全软件开发的最佳实践 (例如对开发中的新功能进行威胁建模)。
- 提供发布的漏洞披露政策的 URL,政策包含第三方 (可能包括 Apple) 向你报告安全漏洞和问题时使用的联系信息、报告中要提供的信息以及预期的状态更新时间。
- 承诺及时修复你的 App 或 App 使用的第三方 Web 浏览器引擎中被利用的漏洞 (例如,在 30 天内修复被利用的最简单类别的漏洞)。
- 提供一个或多个公开网页的 URL,其中说明哪些报告的漏洞已在特定的浏览器引擎版本和相关 App 版本 (如果不同) 中得到解决。
- 如果你的第三方 Web 浏览器引擎使用的根证书存储区无法通过 iOS SDK 访问,你必须使根证书策略可公开访问且该策略的所有者必须以浏览器开发者的身份参与 Certification Authority/Browser Forum。
- 展示对现代传输层安全协议的支持,以在使用浏览器引擎时保护传输中的数据通信。
计划安全要求
你必须:
- 在替代 Web 浏览器引擎中使用内存安全的编程语言或可提高其他语言内存安全性的功能,至少对于处理 Web 内容的所有代码必须这样做;
- 采用最新的安全防护措施 (例如指针验证码),以移除某些类别的漏洞或提高开发漏洞利用链的难度。这包括采用:
- 指针验证码 (PAC);
- 内存完整性强制技术 (MIE),适用于 (i) 任何内容扩展中的系统提供的分配器,以及 (ii) 任何 App 进程和扩展 (包括网络和图形渲染扩展) 中的自定或系统提供的分配器;
- 遵循安全设计和编程最佳做法;
- 使用进程隔离来限制漏洞利用的影响并验证第三方 Web 浏览器引擎内的进程间通信 (IPC);
- 监控任何第三方软件依赖项和 App 的整个软件供应链中是否存在漏洞,如果漏洞影响到你的 App,则迁移到更新版本;
- 不使用不再接收修复漏洞的安全更新的框架或软件库;并且
- 在解决报告的漏洞和开发新功能之间,优先处理前者。例如,第三方 Web 浏览器引擎在平台的 SDK 和 Web 内容之间连接各种功能以支持 Web API,但如果发现该 Web API 存在漏洞,你必须根据要求移除对它的支持。大部分漏洞应在 30 天内解决,但更复杂的漏洞可能需要更长时间。
计划隐私要求
你必须:
- 默认阻止跨站 Cookie (即第三方 Cookie),除非用户在知情的情况下明确选择允许此类 Cookie,或在弹窗情况下出于兼容性的要求启用此类 Cookie (弹窗与其打开窗口中的框架交互);
- 将网站可观测的任何存储或状态按顶级网站进行分区,或阻止此类存储或状态被跨站使用和观测;
- 不得在你的 App 与任何其他 App (即使是来自同一开发者的另一 App) 之间同步任何状态 (包括 Cookie),除非用户已明确授权进行状态同步,无论是通过同时登录你的 App 和另一 App,还是通过另一明确授权机制;
- 在未经用户同意和用户启用的情况下不得与网站分享设备标识符;
- 使用提供的 API 标记网络连接,以便在 iOS 上 (App 分发到的任何位置) 生成 App 隐私报告;
- 根据 Web API 的需要,遵循普遍采用的关于何时需要用户知情启用和/或用户知情同意的 Web 标准 (例如剪贴板或完整的屏幕访问权限),包括提供个人身份识别信息 (PII) 访问权限的 Web 标准。
嵌入式浏览器引擎授权
适用于 App 内浏览
获得嵌入式浏览器引擎授权后,你可以在自己的 App 中嵌入替代浏览器引擎以提供 App 内浏览体验。App 内浏览是指动态展示将通过 Web 浏览器 App 访问和运行的 Web 内容。这不包括嵌入在 App 中或只能通过 App 获取的内容。
在提供 App 内浏览功能时,App 必须主要侧重于提供网页浏览功能。提供 App 内浏览功能时,用户界面必须:
- 占据大部分显示区域,其他部分为允许最终用户控制浏览会话的相关控件;
- 提供指向系统默认浏览器的按钮或链接,以允许用户打开专用浏览器 App 来查看当前显示的内容;并且
- 显示通过 App 内浏览功能呈现其内容的域名或 URL。
如果你想要在你的 App 中使用替代浏览器引擎以提供 App 内浏览体验,请查看以下要求,然后提交嵌入式浏览器引擎授权请求。你将需要提供要嵌入的引擎的相关信息,包括该引擎如何满足要求以及如何将其集成到 App 中以提供 App 内浏览体验。如需技术指导,请查看“示例和资源”部分。
要求
要符合授权资格,你的组织必须是浏览器引擎管理方。浏览器引擎管理方是指对运营独立 Web 浏览器引擎负有主要责任的实体。
- 主要责任是指你对 Web 浏览器引擎拥有运营控制权,并在发现 Web 浏览器引擎存在安全或隐私漏洞时,最终负责协调响应及解决问题。
- 独立 Web 浏览器引擎由与其他任何 Web 浏览器引擎不同的实体或组织维护,并且其架构以及对 Web API 的支持机制与其他引擎有着实质性区别。该引擎通常不会为了反映分支发生的更改而进行更新,而是向分支推送更改。
App 要求
你的 App 必须:
- 仅在日本的 iOS 上分发 (Apple 在开发者协议及其任何附录中明确允许的所有其他司法管辖区或 Apple 平台除外,前提是你已获得相应的授权描述文件);
- 仅将授权用于 App 内浏览;
- 没有默认的浏览器授权
- 满足以下功能要求以确保你的 App 使用的 Web 浏览器引擎可提供基本的 Web 功能:
- 在即时 (JIT) 编译不可用 (例如用户启用了锁定模式) 的情况下,仍要满足上述测试套件要求
- 承诺保护开发过程,包括监控应用程序的软件供应链是否存在漏洞,以及遵循有关安全软件开发的最佳实践 (例如对开发中的新功能进行威胁建模)。
- 提供发布的漏洞披露政策的 URL,政策包含第三方 (可能包括 Apple) 向你报告安全漏洞和问题时使用的联系信息、报告中要提供的信息以及预期的状态更新时间。
- 承诺及时修复你的 App 或第三方 Web 浏览器引擎中被利用的漏洞 (例如,在 30 天内修复被利用的最简单类别的漏洞)。
- 提供一个或多个公开网页的 URL,其中说明哪些报告的漏洞已在特定的浏览器引擎版本和相关 App 版本 (如果不同) 中得到解决。
- 如果你选择的第三方 Web 浏览器引擎使用的根证书存储区无法通过 iOS SDK 访问,你必须使根证书策略可公开访问且该策略的所有者必须以证书使用者的身份参与 Certification Authority/Browser Forum。
- 展示对现代传输层安全协议的支持,以在使用浏览器引擎时保护传输中的数据通信。
计划安全要求
你必须:
- 在替代 Web 浏览器引擎中使用内存安全的编程语言或可提高其他语言内存安全性的功能,至少对于处理 Web 内容的所有代码必须这样做;
- 采用最新的安全防护措施,以移除某些类别的漏洞或提高开发漏洞利用链的难度;
- 遵循安全设计、安全编程和最佳实践;
- 监控任何第三方软件依赖项和 App 的整个软件供应链中是否存在漏洞,如果漏洞影响到你的 App,则迁移到更新版本;
- 不使用不再接收修复漏洞的安全更新的框架或软件库;并且
- 在解决报告的漏洞和开发新功能之间,优先处理前者。例如,第三方浏览器引擎在平台的 SDK 和 Web 内容之间连接各种功能以支持 Web API,但如果发现该 Web API 存在漏洞,你必须根据要求移除对它的支持。大部分漏洞应在 30 天内解决,但更复杂的漏洞可能需要更长时间。
计划隐私要求
你必须:
- 默认阻止跨站 Cookie (即第三方 Cookie),除非用户在知情的情况下明确选择允许此类 Cookie,或在弹窗情况下出于兼容性的要求启用此类 Cookie (弹窗与其打开窗口中的框架交互);
- 将网站可观测的任何存储或状态按顶级网站进行分区,或阻止此类存储或状态被跨站使用和观测;
- 在未经用户同意和用户启用的情况下不得与网站分享设备标识符;
- 使用提供的 API 标记网络连接,以便在 iOS 上 (App 分发到的任何位置) 生成 App 隐私报告;
- 根据 Web API 的需要,遵循普遍采用的关于何时需要用户知情启用和/或用户知情同意的 Web 标准 (例如剪贴板或完整的屏幕访问权限),包括提供个人身份识别信息 (PII) 访问权限的 Web 标准。
其他要求
- 在提交每个二进制文件时,必须提交 App 中嵌入的第三方 Web 浏览器引擎的名称和版本。
- 当 App 中嵌入的第三方 Web 浏览器引擎有新版本可用后,你必须在十五 (15) 个日历日内提交 App 更新以提供该新版本。
示例和资源
这部分包含可帮助你满足使用替代浏览器引擎的要求的其他资源和示例。
安全 SDLC (软件开发生命周期)
你需要满足的许多要求都依赖于开发一种安全和隐私保护优先的方法来将新功能引入你的 App。当你开始开发新功能时,应该首先制定一个威胁模型和一个计划,用于确保你的架构和 App 的发布版本能够缓解已识别的风险。有很多方法可以获得保障,例如代码审计、模糊测试以及编写测试来验证你打算实施的安全属性。你应将所有 Web 内容视为不受信任且可能是恶意的内容。
资源
安全防护措施和内存安全
你还应考虑 iOS 或 iPadOS 当前提供了哪些安全防护措施,例如指针验证码和内存完整性强制技术,以及哪些编程语言 (或语言和编译器功能以及其他工具) 可用于缓解你发现的每种威胁。例如,Swift 是一种默认的内存安全语言,可帮助你避免多种常见的漏洞来源以及其他与内存相关的软件错误。但是,内存不安全的语言 (例如 C++) 也可提供有利于内存安全的功能,例如 std::span。此外,还可以使用编译器选项和工具,例如 C 语言的 -fbounds-safety,它允许为现有代码添加注解,以缓解越界内存访问,而无需总是将功能重写为默认内存安全的语言。
资源
漏洞管理
你应当假定浏览器引擎中始终存在未被发现的漏洞,或者任何新功能都可能引入意外风险。因此你必须实施相应的流程,以便在发现漏洞时能够及时应对,无论是通过内部测试以及安全和隐私保护措施发现的漏洞、在软件供应链中发现的漏洞还是其他方向你披露的漏洞。
当你为第三方 (例如安全研究人员) 提供报告漏洞的渠道时,应当考虑需要他们提供哪些信息以便快速确定问题的真实性和原因。你还应确保已制定相应流程来优先修复漏洞,然后再发布更新 (有可能与正常的计划不同步)。
此外很重要的一点是,用户必须能够快速确定哪些有关联 CVE-ID 的公开漏洞在哪个 App 版本 (或替代浏览器引擎) 中已得到解决。
资源
网络安全性
通过使用 iOS SDK,尤其是 Network 框架和/或 SecTrust API,你可以减轻自己的相关责任,包括评估 Web 证书的信任,以及为你使用的替代浏览器引擎维护或使用相应的根信任库和计划。如果你在运营某个计划,它应说明根证书颁发机构 (CA) 如何申请加入计划,以及如何报告发生的事件 (例如根证书颁发机构的私钥材料暴露) 以便你采取措施。
网络上使用的协议在不断发展,以应对新出现的威胁并更好地保护用户隐私和安全。应与你的替代浏览器引擎兼容的未弃用的当前现代 TLS 版本为 TLS 1.2 和 1.3,但有可能会随着时间推移而发生变化。你可以在替代浏览器引擎中支持已弃用的协议,但在用户浏览到仅支持此类协议的网站时你应该通知用户。