返回知识中心
平台

Origin Private File System:句柄、Worker 与隐私边界

了解 OPFS 的来源隔离、文件句柄、Worker 访问、配额结果与隐私安全验证。

BotBrowser Team

文档中心

想直接进入 平台 文档吗?

这篇文章属于博客内容库。若你要步骤化配置、参考说明和持续更新,请直接进入对应 docs 分区。

Origin Private File System(OPFS)为网页来源提供浏览器管理的私有文件区域,用于保存应用数据。它不同于用户可见的下载目录,也受浏览器存储策略约束。句柄标识该区域内的条目,不是通用路径,也不会授权访问其他来源。BotBrowser 可以重复经授权的页面流程并记录可见结果,但不能绕过来源检查、授予配额,或保证所有设备上的文件持久性。

两个来源各有独立的私有文件区域,Worker 只能在同一来源边界内访问文件。

OPFS 隔离什么

navigator.storage.getDirectory() 返回该来源的私有根目录。其下创建的文件和目录关联到来源及浏览器 profile。https://a.example 页面无法解析由 https://b.example 创建的句柄,即使两个应用使用相同文件名也是如此。私有文件也不同于用户通过选择器选取的文件。MDN 的 OPFS 指南说明了这种存储模型及浏览器管理的生命周期。

句柄是在此边界内使用的能力对象。FileSystemFileHandle 标识文件条目,FileSystemDirectoryHandle 标识目录。句柄可存入 IndexedDB 以便稍后重新打开,但应用仍须处理条目缺失、记录更名或 profile 被清除。将句柄视为不透明应用状态,不要把它当作可展示或发送给服务器的路径。

边界针对来源,而非账户。同一来源的多个用户可能共用一个 profile,一个用户也可能有多个 profile。不要把句柄读取成功变成身份信号。句柄缺失可能表示首次使用、删除、浏览器清理、切换 profile 或应用迁移。

句柄与 Worker 访问

Worker 可以访问 OPFS 根目录,因此适合执行解析、索引等 UI 线程之外的工作。Worker 仍运行在相同来源和 profile 中,不会成为跨来源文件服务。在支持的上下文中,专用 Worker 可使用同步访问句柄;异步方法则是更通用的基线。应在实际上下文检测能力并准备回退。

明确句柄的消息协议。页面可以向 Worker 发送有限命令,Worker 返回状态或派生结果。能用小范围操作解决时,不要传递凭证、完整文件内容或不受约束的消息通道。验证消息来源和操作名称,并在任务结束时关闭 Worker。

并发写入需要应用规则。Worker 和 tab 可以同时持有句柄,浏览器不会决定哪个业务更新胜出。使用版本号、应用拥有的锁或事务格式。写入完整的新记录,按 API 要求刷新或关闭,然后发布新版本。Worker 被终止时可能留下不完整记录,因此恢复逻辑要区分“尚未开始”“已提交”和“中断后结果未知”。

配额与持久化结果

OPFS 会占用浏览器存储配额。navigator.storage.estimate() 返回估算值,不是容量承诺;其他 tab 或来源也可能改变可用空间。写入可能因配额、权限或策略限制,或实现相关错误而失败。界面应保留用户输入并说明下一步,不要声称文件已保存。

持久化是请求,不是保证。navigator.storage.persist()可能依浏览器策略、使用情况、设备条件和隐私浏览规则返回 true 或 false。true 仅描述当前来源和 profile,不承诺备份、导出或用户清除数据后的存续。记录保留选择;重要数据应提供明确导出方式。

配额观察用于容量规划,不用于指纹识别。记录 saved、quota-full 或 storage-unavailable 等粗粒度应用结果,避免保留精确设备容量或长期存储特征。测试完成后删除诊断 fixture;仅在产品目的需要时才将账户记录保存在服务器。

隐私安全验证

使用合成来源和干净测试 profile。创建小文件,在同一来源读取,再尝试从第二个来源执行相同操作。预期应是功能结果:第二个来源无法解析第一个来源的句柄。这不是个人身份、浏览器厂商或所有存储 API 的证据。

分别测试页面与 Worker 路径:在页面创建文件,在 Worker 读取,在写入期间终止 Worker,然后重新打开记录。记录浏览器族、版本、来源类别、profile 状态、操作结果和可见回退。不要上传真实文档或收集完整目录清单。浏览器更新后使用相同 fixture 对比,避免同时更换 profile、应用版本和存储策略。

File System Access API 规范与 WHATWG Storage Standard定义接口和存储概念,但不承诺业务结果。API 调用成功只能证明该操作在此上下文成功。服务器授权、加密、保留和恢复仍由应用负责。

产品边界与恢复

告知用户草稿是留在当前浏览器、导出到所选文件,还是上传到账户。在用户确认导出或上传前保留本地草稿。提供清除私有文件的明确操作,并确保 OPFS 不可用时页面仍可使用。第一方恢复页面可以恢复已授权的账户记录,但不能静默复制其他来源的私有文件。

句柄失效时,区分空工作区和网络请求失败。首次使用显示设置,临时失败提供重试,profile 被清除则提供恢复或导出操作。可访问状态文本应说明结果,不暴露私有文件名或账户标识。

BotBrowser 可以在声明的 profile 中重复经授权的 OPFS 流程,并比较支持的浏览器版本中的可见结果。它不能控制浏览器配额策略、持久化决定、来源隔离、Worker 调度或服务器保留策略。将运行结果视为特定测试流程的证据,并记录浏览器、profile、应用版本及回退路径。

来源与延伸阅读

下一步可使用合成数据运行一个双来源、页面与 Worker 测试 fixture,并为配额不足或存储不可用设计明确回退。

TL;DR

  • OPFS 文件属于一个来源和 profile;句柄不是共享路径或账户身份。
  • Worker 可以访问同一来源的文件,但并行写入仍需要版本和恢复规则。
  • 配额与持久化结果有条件,应保留输入并提供导出或回退。

Contents

Conclusion

OPFS 是来源范围内的工作区,不是跨站身份或备份系统。句柄应保持不透明,Worker 写入应可恢复,配额应视为观察结果。另见浏览器存储分区和 Web Locks 协调。

Sources

#OPFS#File System Access API#Worker#浏览器隐私

让 BotBrowser 从研究走向生产

先用这些指南理解模型,再进入跨平台验证、隔离上下文和面向规模化的浏览器部署。