H6.13.2account switch clears previous sensitive state设计研究

切换账号不应保留上一账号未清理的敏感状态

别名: 切换串号 · account switch leakage · 草稿串账号

概念解释

从账号 A 切到 B 时,A 的未发送草稿、剪贴板里的证件号、WebView 登录态、内存里的支付表单,若还留着,B 的使用者(或同一人的另一身份)会看见或发出去。不保留上一账号的敏感状态指切换完成时,这些以 A 为作者的临时状态被丢弃或收进仅 A 能再打开的存储,B 的界面从 B 自己的状态启动。这不是本机退出:A 的会话可以仍挂在切换器里。也不是产品级数据隔离策略声明,而是切换这一动作的现场清理。

机制

为了快,应用把草稿和 WebView 做成全局单例。切换若只换「当前用户 ID」,单例里还是 A 的字。发送按钮不看作者,于是 B 的名义发出 A 的草稿。剪贴板属于操作系统,应用很难清,但应用内粘贴板、验证码倒计时、文件选择器的「最近」列表属于应用,必须按账号分桶或在切换时清。冷启动恢复若只恢复「最后一屏」而不恢复「最后是谁」,也会把 A 的半页付款表交给 B。清理失败在界面上往往看起来像小故障,后果却是串身份。

怎么研究

在 A 留下未发送内容、打开过需登录的 WebView、复制过敏感字段,切到 B 后检查 B 能否看见或发出。

自变量:草稿存储是全局还是按账号、切换是否销毁 WebView、是否分账号「最近文件」。 因变量:B 能否看到 A 的草稿正文、B 的 WebView 是否仍登录 A、以 B 的名义发出 A 内容的次数。

自动化应作为回归。真人任务用「给 B 发一条新消息」看是否带出 A 的字。不要把「顶栏头像换成了 B」当清理成功。

边界

用户明确「把草稿带到新账号」是合并,要做成可选动作,默认仍是分桶。系统剪贴板可能留下 A 的字,产品至少不应在 B 的字段里自动粘贴。共享设备上切换不如退出干净,若切到 B 后 A 仍保持后台会话,那是产品选择,但前台不得显示 A 的内容。只读的公共缓存(表情包)不必清。

怎么落地

  • 草稿、未提交表单、会话级 WebView、应用内最近文件按账号分桶;切换时卸载 A 的前台状态,加载 B 的空或 B 自己的草稿。
  • 发送路径校验作者 ID 与当前账号一致,不一致则拦截。
  • 切换动画结束后不得再闪一帧 A 的内容。
  • 验证:A 写好未发送私信并打开过带登录态的页,切到 B 后 B 的编辑器应空、WebView 应是 B 或未登录,以 B 发送不得带出 A 的字。回归测试覆盖冷启动恢复顺序。

延伸

  • 同组H6.13.1 多账号切换需要清楚标识当前所处的账号身份 · H6.13.3 通知与消息需要标注来源账号,避免多账号混淆 · H6.13.4 多账号并存时的数据隔离边界需要明确
  • 相邻H6.07 退出登录 · H6.06 多设备会话
  • 站内检索account switch leakage · draft isolation · multi-account state

同组卡片

快捷操作

分享

分享当前页面

ios_share

https://hci.top/zh/handbook/H6.13.2