安全性
Raycast
Raycast 本身作为“开发者 ID 应用程序”在 App Store 之外运行,在应用程序分发之前使用 Raycast 证书进行签名并由 Apple 的公证服务进行验证。 Raycast 提供了与操作系统级功能交互的各种命令,其中一些命令会在需要时提示用户授予权限。该应用程序会自动保持最新状态,以最大限度地降低运行严重过时版本的风险并快速发布修补程序。 Raycast 是一个本地优先的应用程序,它将用户数据存储在本地加密数据库中,利用存储安全数据的系统 Keychain,并且通常直接连接到第三方 API,而不是通过 Raycast 服务器代理数据。
发布流程
所有扩展都是开源的,因此可以随时检查当前的源代码。在扩展程序合并到公共存储库之前,Raycast 和社区的成员会协作审查扩展程序,并遵循我们的商店指南。代码审查后,持续集成系统会执行一组验证,以确保清单符合定义的架构、所需资产具有正确的格式、作者有效,并且不存在构建和类型错误。 (计划使用更多用于自动化静态安全分析的 CI 管道工具。)然后将构建的扩展存档并上传到 Raycast Store,并最终为注册用户帐户发布。安装或更新扩展时,将从商店下载该扩展,取消存档到磁盘,并在本地 Raycast 数据库中更新记录。最终用户通过内置商店或网上商店安装扩展。
运行时模式
为了运行扩展,Raycast 启动一个 Node.js 子进程,在其中根据需要加载和卸载扩展; Raycast 的进程间通信通过标准文件句柄和小型 RPC 协议进行,该协议仅公开一组定义的 API,也就是说,扩展程序不能只执行任何 Raycast 操作。 Node运行时由Raycast管理并自动下载到用户的机器上。我们使用官方版本并验证 Node 二进制文件以确保它没有被篡改。
扩展在自己的 v8 isolate(工作线程)中运行,并获得自己的事件循环、JavaScript 引擎和 Node 实例以及有限的堆内存。这样,当未来的 Raycast 版本可能支持同时运行的多个扩展的后台执行时,我们可以确保扩展之间的隔离。
权限
就文件 I/O、网络或 Node 运行时的其他功能的策略而言,扩展不会进一步沙箱化;这在未来可能会改变,因为我们希望仔细平衡用户/开发人员体验和安全需求。默认情况下,与其他 macOS 应用程序类似,访问特殊目录(例如用户文档目录)或执行屏幕录制首先需要用户通过 macOS 安全和首选项弹窗向 Raycast(父进程)授予权限,否则不允许进行编程访问。
数据存储
虽然扩展可以访问文件系统并使用自己的存储和访问数据的方法,但 Raycast 提供了用于安全存储数据的 API:密码首选项可用于向用户询问访问令牌等值,本地存储 API 提供了读取方法并写入数据有效负载。在这两种情况下,数据都存储在本地加密数据库中,并且只能由相应的扩展程序访问。
自动更新
Raycast 本身和扩展都会自动更新,我们认为这是一项安全功能,因为过时且易受攻击的软件已经发生了无数的漏洞。我们的目标是开发人员和最终用户都不需要担心版本,并且我们最大限度地缩短从更新到分发给最终用户的时间。
最后更新于