返回文章列表

Flomo Extension 权限与数据流:storage、tabs、alarms、identity 分别做什么

作者:Flomo Extension · 发布于 · 更新于

安装浏览器扩展时,只看到一组权限名称,很难判断它们与实际功能有什么关系。本文不使用“安全可靠”之类无法由代码单独证明的结论,而是依据 Flomo Extension 1.20.0 源码,把每项权限对应到具体操作,并说明当前实现的边界。

核验结论适用于本文检查的 1.20.0 源码,不等同于对 Chrome 商店安装包的独立安全审计。商店版本、依赖和后续代码都可能变化,安装时仍应以浏览器展示的权限与本站隐私政策为准。

先看结论:每项权限用在哪里

权限或页面范围 当前源码中的用途 什么时候发生
storage 保存草稿、flomo 标签页 ID、扩展账户摘要和当日使用记录 编辑草稿、连接 flomo 页面、登录扩展账户或完成一次保存时
tabs 查找 v.flomoapp.com 标签页、连接页面脚本、必要时打开或切换到该页面 打开扩展、点击“打开 flomo 页面”或后台定时检查时
alarms 设计上用于每 5 分钟检查一次 flomo 标签页 安装回调尝试创建任务;1.20.0 存在异步判断缺陷,不能确认任务一定建立
identity 发起 Google OAuth 登录 只有用户点击“Google 登录”时
*://*/* 内容脚本范围 在网页中监听鼠标选中文本,并显示“添加到草稿”入口 用户在普通网页完成一次鼠标选择时
*://*.flomoapp.com/* 内容脚本范围 在 flomo 页面内接收草稿、读取页面标签并操作编辑器 flomo 页面打开且扩展与该标签页建立连接后

这里需要区分两件事:storagetabsalarmsidentity 是扩展清单中的权限;*://*/* 是选中文本内容脚本的页面匹配范围。后者意味着脚本会在普通 HTTP/HTTPS 网页中加载,因此同样值得单独说明。

storage:哪些内容保存在浏览器本地

当前存储封装使用 WXT 的 local: 存储区域。源码中可以确认的本地项目包括:

  • flomo-draft:编辑器中的 HTML 草稿;
  • flomo-tab-id:当前用于通信的 flomo 标签页 ID;
  • flomo-extension-login-user:扩展账户的邮箱、套餐和到期时间等摘要;
  • flomo-extension-use-record:本地日期与当日保存计数。

草稿会在编辑器内容变化时写入本地存储,关闭弹窗前也会再执行一次保存。收到页面脚本返回的正向保存结果后,扩展会清空草稿并增加当日计数。

当前源码没有为草稿设置自动过期时间,也没有在退出扩展账户时同时删除草稿。浏览器清理扩展数据或卸载扩展后的行为由浏览器管理,本次核验没有将其当作可恢复机制。重要内容不应只依赖扩展草稿保存。

tabs:只看权限名称无法知道查询范围

tabs 权限本身允许扩展使用标签页 API。就本次检查到的功能路径而言,查询使用的是 *://v.flomoapp.com/*

  1. 扩展弹窗检查当前窗口是否已打开 flomo 页面;
  2. 找到页面后,记录标签页 ID;
  3. 弹窗通过该 ID 与 flomo 页面中的内容脚本建立连接;
  4. “打开 flomo 页面”按钮会切换到已有页面,或新开 https://v.flomoapp.com

保存功能需要这条连接,因为扩展不是在后台直接提交 flomo 笔记,而是把内容交给已打开的 flomo 页面处理。当前核验到的查询没有遍历并上传浏览历史,但权限能力不能只靠这句话判断;如果后续版本改变查询逻辑,应重新核对源码和权限说明。

alarms:设计意图与 1.20.0 的实际缺陷

后台代码注册了名为 flomo-alarm 的监听逻辑,设计目标是每 5 分钟维护一次 flomo 标签页。任务如果实际触发,会执行:

  • 如果已经存在 v.flomoapp.com 标签页,就记录第一个匹配页面的 ID;
  • 如果没有匹配页面,就新建 https://v.flomoapp.com 标签页。

这段处理逻辑的作用是让保存入口更容易连接到 flomo 页面。它不是笔记内容的定时同步任务:当前监听代码没有读取或上传草稿。

但 1.20.0 的安装回调有一个重要实现问题:代码调用异步的 browser.alarms.get() 后没有等待结果,就直接判断返回值。使用 Promise 形式的浏览器 API 时,这个返回值本身是一个 Promise 对象,后续“没有任务就创建”的分支不能按预期执行。因此,仅凭当前源码不能声称周期任务已经成功建立。

更准确的结论是:

  • 扩展申请了 alarms 权限,并注册了周期任务的处理器;
  • 源码意图创建 5 分钟周期任务;
  • 当前安装路径存在缺陷,实际是否已有任务还可能受旧版本状态或运行环境影响;
  • 如果任务存在并触发,页面不存在时可能主动打开 flomo 页面;
  • 当前设置页没有找到该行为的显式开关。

这是本次源码核验发现的产品问题,后续版本应等待查询结果后再决定是否创建任务,并为自动打开页面提供用户可控选项。

identity:只在 Google 登录流程中调用

Flomo Extension 有自己的账户体系,用于识别免费或付费套餐;它与用户的 flomo 官方账户不是同一个账户。

当用户点击“Google 登录”时,扩展调用浏览器身份 API 发起 OAuth 流程,请求以下范围:

  • Google 账户基本资料;
  • Google 账户邮箱地址。

OAuth 回调返回访问令牌后,当前代码会把令牌提交到 Flomo Extension 的 /api/oauth/google/token-login 账户接口,再把接口返回的扩展账户摘要保存在浏览器本地。没有点击 Google 登录时,这条流程不会由普通编辑或选中文本动作触发。

邮箱密码登录是另一条路径:扩展会在本地对输入密码计算 SHA-256 值,再提交登录接口。客户端哈希不应被理解为对整个账户系统安全性的证明;服务端存储、传输与访问控制不在本次前端源码核验范围内。

为什么脚本要在所有网页中运行

普通网页内容脚本匹配 *://*/*。其当前职责很窄:

  1. 监听网页的 mouseupmousemove 事件;
  2. 鼠标选择结束后,通过 window.getSelection() 取得选中的纯文本;
  3. 在选区附近显示“添加到 flomo extension 草稿”;
  4. 只有用户点击该入口后,才把文本通过扩展内部消息发送到后台;
  5. 后台把文本追加到浏览器本地草稿。

完成文本选择本身不会写入草稿;必须再点击浮动入口。当前这条代码路径也没有把页面标题或网址自动附在选中文本后面。

不过,“当前实现只处理选区”不等于浏览器授予的页面访问能力很小。全网页匹配范围允许脚本在大量站点运行,密码、支付、企业后台等敏感页面尤其应该谨慎。用户可以在 Chrome 的扩展网站访问设置中限制可访问的网站,但限制后,相应页面的选中文本入口也可能无法工作。

一条笔记实际经过哪些位置

路径一:网页选中文本进入草稿

当前网页的文字选区
→ 普通网页内容脚本读取纯文本
→ 扩展内部消息
→ 后台追加为段落
→ 浏览器本地 flomo-draft

在这一步,源码没有调用 Flomo Extension 的账户接口,也没有直接调用 flomo 的网络接口。

路径二:本地草稿保存到 flomo

浏览器本地草稿
→ 扩展弹窗编辑器
→ 发送给 flomo 页面内容脚本
→ 以 HTML 粘贴事件写入 flomo 网页编辑器
→ 模拟点击 flomo 网页保存按钮
→ 由 flomo 网页完成后续处理

因此,笔记正文最终会进入用户已登录的 flomo 页面,并由 flomo 自己的网页应用处理。Flomo Extension 没有在这条保存路径中读取用户的 flomo 密码;它检查的是 flomo 页面已经存在的登录状态。

路径三:Flomo Extension 账户登录

邮箱与密码哈希,或 Google OAuth 访问令牌
→ Flomo Extension 账户接口
→ 返回邮箱、套餐、到期时间等账户摘要
→ 浏览器本地存储

这条路径与笔记正文路径不同。登录扩展账户不等于登录 flomo,登录 flomo 也不等于已经登录扩展账户。排查保存问题时,需要分别检查两者。

当前实现的明确局限

  • 源码检查不能证明 Chrome 商店中的二进制包与仓库代码完全一致;
  • 本次没有进行网络抓包、依赖供应链审计或服务端审计;
  • 全网页内容脚本的匹配范围较广,当前只读取用户选区是代码现状,不是对未来版本的永久承诺;
  • 后台任务如果存在,每 5 分钟可能主动打开 flomo 页面;1.20.0 的任务创建路径本身有缺陷,且当前没有可见开关;
  • 保存结果的确认边界有限,详见《Flomo Extension 保存流程与故障排查》。

用户可以怎样降低风险

  1. Chrome 扩展商店页面核对开发者和当前权限;
  2. 不使用选中文本功能时,在 Chrome 中限制扩展的网站访问范围;
  3. 不要把密码、密钥、客户资料等敏感文本加入草稿;
  4. 首次保存使用一条可丢弃的测试笔记,并在 flomo 中确认结果;
  5. 权限或功能发生变化时,重新阅读安装提示与隐私政策

核验范围与版本

本文由 Flomo Extension 项目于 2026 年 8 月 1 日依据应用源码核对,目标包版本为 1.20.0。检查范围包括扩展清单、后台任务、普通网页内容脚本、flomo 页面内容脚本、弹窗编辑器、登录接口调用与本地存储封装。本文描述“代码会做什么”,不代替第三方安全测试,也不对 flomo 官方页面的内部实现作推断。