架构
签名策略与执行
规则在控制台中编写,作为一个签名版本发布,由每个浏览器校验,并在表单发送之前在页面中执行。如果浏览器无法证明其策略是最新的,它会故障时默认阻止(fail-closed)。
本文描述截至 2026年9月19日 已实现的 LayerT。尚未实现的内容均已标注。
策略的生命周期
- 控制台起草IT 以草稿形式编写或修改规则。此时还不会下发到任何浏览器。
- 控制台发布发布会将所有待处理的草稿合并应用为一个新版本。可选的双人审阅可防止有人发布自己的草稿。
- LayerT 云端签名该版本被序列化为规范 JSON(canonical JSON),并使用 Ed25519 签名。
- 浏览器获取每 15 分钟一次,另外在启动时和页面跳转后获取,使用条件请求。
- 浏览器校验在使用任何一条规则之前,都会检查签名、密钥、组织、版本和有效期。
- 页面执行规则在网站自身代码运行之前作用于表单提交和粘贴操作。
什么是规则
一条规则说明它适用于哪里、监视哪些字段、什么值会触发它,以及会发生什么。
| 部分 | 选项 |
|---|---|
| 哪里 | 网站匹配模式:精确 URL、通配模式(如 https://*.postbox.example/*)或正则表达式 |
| 哪些字段 | 该页面上字段的 CSS 选择器。管理员可以使用扩展程序的选取器直接在页面上点选来生成 |
| 什么值 | 针对输入值的条件:等于、匹配某个模式、电子邮件域名、属于某个列表,以及用与/或/非进行组合。条件还可以与人员自己的目录身份进行比较,例如“只允许其本人的工作邮箱” |
| 会发生什么 | 监视(仅记录)、阻止、阻止并允许申请(人员可以申请访问),或强制退出登录(清除该网站的 Cookie 和存储,然后显示已退出登录页面) |
目前,LayerT 评估的是表单提交(submit 事件、提交按钮和在字段中按 Enter 键)以及向受监视字段的粘贴。内置规则涵盖个人 Google 账号登录、Telegram Web 和 WhatsApp Web。
签名
每个已发布的版本都会以确定性的方式序列化(键按顺序排列,不含签名字段),并使用 Ed25519 签名。策略包含版本号、所属组织、签发时间和过期时间。
- 版本号只增不减。每次发布都会在加锁的情况下为贵组织取下一个编号,因此两位管理员无法发布同一个版本。
- 回滚会将旧规则作为一个新的、更高的版本发布。此后批准的例外会被保留,除非恢复后的规则不再允许它们。
- 在生产环境中,签名密钥由 Google Cloud KMS 保管且无法导出:LayerT 的服务器向 KMS 请求每一次签名。此功能已构建,并将随 LayerT 的首次生产部署开启。开发构建使用本地密钥签名,而生产构建的扩展程序不信任该密钥。
浏览器收到的签名版本称为策略包。其中包含什么(包括其他人的允许列表和已批准的例外)、它在笔记本电脑上存放在哪里,以及控制这台笔记本电脑的人能对它做什么,请见策略包与设备失陷。
在浏览器中校验
扩展程序在使用每个策略之前,都会使用浏览器自身的 Web Crypto 实现对其进行检查。按顺序,出现以下情况之一时它会拒绝该策略:
- 其版本不比已有的版本新;
- 它属于另一个组织;
- 它使用扩展程序不认识的密钥签名;
- 签名无法通过扩展程序内置公钥的校验;或
- 按笔记本电脑的时钟,它已经过期。
被拒绝的策略会被丢弃,浏览器保留原有的策略。扩展程序可以同时内置多个公钥,因此签名密钥可以无缝轮换。
默认阻止
无法获得最新且真实策略的浏览器,不会悄悄停止执行策略。
- 策略在签发 7 天后过期,LayerT 会在此之前 48 小时自动重新签名。只有当浏览器已经连续数天无法连接 LayerT 时,才会遇到过期的策略。
- 在受阻止或强制退出登录规则覆盖的页面上,过期的策略会阻止所有表单提交,以及向该规则字段的所有粘贴,并显示一张“需要网络连接”卡片。卡片会说明发生了什么,并且只提供“返回”选项。
- 监视规则继续记录。
- 浏览器重新连接后,卡片会在大约 30 秒内自行消失,无需重新加载页面。
紧急停止
所有者可以为整个组织关闭所有执行。紧急停止本身也是一个签名策略版本,因此没有人能向浏览器发送伪造的停止指令。它会被记录,并通知所有者和 IT 管理员。它只会关闭执行:不存在反过来锁定一切的开关。
浏览器会在下一次同步时收到它:15 分钟之内,如果人员进行页面跳转则会更快。停止指令在策略中被标记为紧急,但目前扩展程序获取它的速度并不比其他变更更快。吊销浏览器和回滚也以同样的方式送达。
在页面中执行
LayerT 的内容脚本会在网站自身代码看到提交和粘贴之前进行监听。当规则匹配时,LayerT 会取消该事件,因此网站的请求永远不会发出。端到端测试会检查请求确实没有发出。
LayerT 的提示在设计上使页面无法干扰它们:
- 它们绘制在封闭的 Shadow Root 中,页面脚本无法访问。
- 它们的按钮只响应真实的点击和按键,不响应脚本生成的事件。
- 它们从不显示规则的内部名称,而是显示管理员编写的消息。
- 它们从不索要密码,也从不包含密码字段。有一项测试会检查每个提示。
- 当页面上显示提示时,LayerT 工具栏图标会显示一个页面无法伪造的琥珀色圆点。
申请访问
如果规则允许,被阻止的人员可以申请访问。
- 浏览器申请人员说明原因。请求有截止时间,默认为 30 分钟。
- 控制台或弹出窗口决定审批人选择:单次尝试(五分钟)、15 分钟、1、8 或 24 小时,或永久。
- LayerT 云端应用批准会在一个原子步骤中成为新签名策略中的一个例外。
- 浏览器重试提示会自行更新。如果人员已经离开,桌面通知会告知他们。
- 任何人都不能审批自己的请求。服务器会拒绝这样的审批。
- 永久例外只能由合规官或所有者授予,IT 永远不能授予。
- 无人处理的请求会自动过期。
- 审批人会通过控制台收件箱、扩展程序,以及电子邮件、Slack 或浏览器通知得知请求,具体方式由每个人自行选择。他们可以在控制台中或直接在 Slack 中做出决定,在 Slack 中做出的决定会被如实记录。
记录哪些内容
每一次阻止、监视匹配和例外的使用都会生成一条审计事件,包含网站、字段、匹配的值和人员。这些值有意保持可读,以便审计人员能看到被阻止的登录使用的是个人地址。审计事件默认保留 365 天,每个组织都可以更改这一期限。