本说明适用于 2FA 验证助手的 Firefox 扩展。扩展连接用户自行配置的 2FA 实例,用于查看、复制、匹配和填充 TOTP 验证码。支持 Firefox 153 及以上桌面版本,使用普通窗口和默认容器;不支持隐私窗口、容器标签页和 Android。
默认使用网页登录会话模式。扩展使用当前浏览器中已有的实例登录状态,读取账户数据和服务器时间,在后台临时计算验证码。扩展会读取实例的完整密钥列表,包括原始 TOTP 种子,并非只读取当前选中的账户。 此模式不持久保存种子,也不将种子传给扩展弹窗或目标网站。实例标签页可以关闭,但取码需要网络和有效登录状态。扩展不直接读取 Cookie 值,也不会自动延长登录会话。
只有用户主动开启“允许离线使用”后,扩展才会将当前实例的账户数据、原始密钥、缓存时间及校时信息保存到本地,供断网或浏览器重启后计算验证码。首次配置默认关闭,扩展更新不会自动为未启用的用户开启。用户明确点击“从 2FA 网页恢复”时,也可从与配置地址相同的实例顶层网页复制已有缓存及图标,不会从目标验证网站读取密钥缓存。
离线缓存是包含原始密钥的明文独立副本,没有额外的密码加密,不是独立加密保险库。 能够控制浏览器用户配置或扩展运行环境的人,可能读取这些密钥。请仅在可信设备上启用;关闭实例网页或重启浏览器不会删除缓存。
| 数据 | 用途与保存方式 |
| ------------------------------------------------------ | -------------------------------------------------------------------------------------------------- |
| 当前及最近使用的实例地址 | 保存在本机,便于连接和切换实例。 |
| 网站与账户的绑定、收藏账户 | 按实例保存在本机,用于推荐账户和星标置顶;切换实例会保留各自的绑定和收藏。 |
| 自动填充的网站及授权路径 | 保存在本机,用于限制自动检测和填充范围;不包含账户密钥。 |
| 账户名称、用户名或邮箱、标识、服务分组及不兼容记录名称 | 用于展示、搜索和匹配;默认仅临时处理,开启离线使用后随当前实例缓存保存在本机。 |
| 原始密钥、缓存时间、校时信息和服务图标 | 仅在启用离线使用时保存在当前实例的扩展缓存中;最近一次校时结果另存于会话存储,浏览器关闭后清除。 |
| 当前和下一组验证码、有效期 | 临时保留,用于显示和填充;账户卡片离开视野、被筛除或弹窗关闭后清除相关显示数据,不持久保存验证码。 |
| 当前页面地址、页面身份及短期授权和填充状态 | 临时处理,用于确认权限、识别页面变化并防止误填,不在短期会话存储中保存种子或验证码。 |
用户点击复制后,验证码会进入系统剪贴板;扩展不会随后清除剪贴板,也不承诺对已使用的物理内存进行安全擦除。
本地设置、绑定、收藏和离线缓存不通过浏览器账号跨设备同步。持久数据使用 Firefox 的扩展本地存储 storage.local;Firefox 不提供 Chrome 的 setAccessLevel 访问控制,因此不能将本地存储视为仅限后台或弹窗的保密隔离区。同一扩展的内容脚本可以通过扩展 API 访问本地存储;本扩展的目标网页内容脚本不读取离线种子缓存,也不向网页提供读取该缓存的接口。短期状态使用 storage.session,默认不向内容脚本开放。这些浏览器存储机制均不等于额外的密码加密。
扩展使用 activeTab、scripting、storage、clipboardWrite,以及用户明确批准的可选主机权限。clipboardWrite 用于用户点击复制时写入验证码,不授予读取剪贴板的权限。点击扩展或使用快捷键可取得当前页面的临时访问权限,用于手动填充;只有用户在验证页面开启“在此页面自动填充”并授权后,扩展才会在该页面后续访问时自动检测。清单允许申请 HTTP/HTTPS 主机权限,实际按具体协议和主机申请,不一次申请全部网站。
网站地址按协议、主机和端口识别;自动填充还按页面路径限制。授权路径包含页面使用的 hash 路由路径,但不保存查询参数和普通锚点,仅靠查询参数区分的页面共享同一授权范围。浏览器授予的主机权限本身不能区分端口和路径,扩展会另行检查,未授权路径不会因此获得自动填充许可。远程实例要求 HTTPS,本机开发地址例外;自动填充的 HTTP 目标仅限本机地址;私网地址等其他 HTTP 页面只能手动填充,此前对这类页面开启的自动填充授权会被自动移除。
为定位验证码输入框,扩展会读取页面结构、输入框状态和可见性,并响应页面地址或输入状态变化。可以访问浏览器允许的同源嵌入页面及开放的 Shadow DOM,不访问跨域或沙箱隔离的嵌入页面及关闭的 Shadow DOM。未授权路径打开弹窗只展示账户,用户点击“填充”或执行快捷键才进行一次性手动填充。
在明确的 Google TOTP 验证页面,扩展会读取当前登录邮箱,与实例中的账户元数据匹配。该页面邮箱仅在内存和短期会话状态中处理,不写入本地持久配置,不读取或保存 Google 登录网址中的会话参数,也不额外发给 2FA 实例。记住 Google 账户时,网站绑定只保存账户标识,同一登录页上的不同账户按实例中各账户自身记录的邮箱区分。其他网站根据网站地址、已有绑定和账户元数据匹配,不从任意页面文字推断登录身份。自动匹配不会自行修改网站绑定。
填充的验证码会交给目标网站;多个匹配账户的名称和账号可能显示在该网站内的选择面板中。 目标网站可以读取被填入其输入框的值,面板也处于目标网站的展示环境,请仅在可信网站上授权。完整账户库和种子不会交给目标页面。
自动填充只处理已授权页面中明确、可见且空白的验证码框,不持续覆盖用户输入。手动填充可替换旧验证码。扩展不主动点击提交按钮,但网站可能在验证码填完整后自行提交。浏览器内部页或不允许填充的页面仍可查看、复制验证码;隐私窗口及容器标签页不在本版本支持范围内。请在普通窗口的默认容器中登录实例及使用扩展。
扩展的业务网络请求仅发送到用户配置的实例,用于读取账户数据、校准时间及取得服务图标。账户与时间请求使用已有登录会话;图标请求会包含服务域名,不包含账户名、种子或验证码,离线图标下载不携带登录凭据。实例及其托管服务商仍会收到正常请求及相关网络信息。
实例收到图标请求后,会由实例服务器代为获取图标:依次尝试 Google 图标服务、Yandex 图标服务,再直接访问该服务域名的 HTTPS 和 HTTP 地址,取得图标即停止。因此这些第三方会收到服务域名及实例服务器的网络信息,但不会收到账户名、种子、验证码、登录凭据或用户浏览器的网络信息。
离线模式会在联网时更新账户和图标,也会检查已授权实例网页的数据变化并向服务器核对;普通变化通知不包含账户或密钥。已有缓存可用于本地计算,不为每次换码或填充请求实例。恢复网页缓存时只读取该实例已有的图标,不为恢复操作另行下载。
扩展不包含遥测、广告或开发者中转服务,也不向开发者提供查询用户账户库的服务。用户主动打开项目主页、部署指南或反馈链接时,会由浏览器访问相应网站。
用户数据仅用于本说明披露的验证码展示、搜索、匹配、复制、离线计算和填充功能,不出售,不用于广告、信用评估或放贷,也不用于与这些功能无关的目的。与实例及目标验证页面的数据交换仅用于完成上述功能。
Firefox 安装界面声明必需的数据类别为“身份验证信息”和“个人身份信息”,用于涵盖实例登录会话、验证码及目标网站中的候选账户名称、用户名或邮箱。用户可以取消安装以拒绝这些必需的数据处理;安装后仍需自行配置实例,并分别授权网站自动填充。此声明不表示数据会发送给开发者,也不表示密钥库会交给目标网站。
- 在已保存的连接上关闭“允许离线使用”,会立即删除扩展中的离线密钥、账户和图标缓存并切回网页登录模式,无需联网。有尚未保存的地址修改时,离线选择随连接一起保存,可先撤销地址修改再关闭离线使用。
- 切换实例或撤销实例访问权限也会清除离线缓存。扩展只保留当前实例的缓存,切回旧实例后需要重新取得账户;这些操作不清除实例网页自己的缓存。
- 在实例网页退出登录或清除网页数据,不会直接删除扩展的独立缓存。后续同步确认登录失效、服务器明确拒绝访问或账户响应无效时,扩展会清除缓存。断网或服务器暂时不可用时仍可能继续使用已有缓存,无法及时得知账户删除、密码变更或服务端撤销;离线密钥不具备即时远程撤销能力。
- 停用某条授权路径后,该路径不再自动检测,同一网站其他已授权路径可继续使用。撤销目标主机权限会清理其全部页面授权;实例权限仍有效时,不因此清除离线缓存。没有其他用途的主机权限会释放,仍被实例或其他授权路径使用的主机权限可能保留。
- 删除网站绑定不会删除实例中的账户。禁用扩展会停止运行但保留本地数据;卸载会移除扩展的配置、历史地址、绑定、收藏及离线缓存。
发布者:wuzf。项目主页:github.com/wuzf/2fa。
隐私问题或功能反馈可通过 GitHub Issues 联系。Issues 是公开交流渠道,请勿提交真实密钥、验证码、管理密码或完整账户列表。