| 等级 | 示例 | 默认处理 |
|---|---|---|
| Public | 公开文章 URL、公开 GitHub 仓库元数据 | 可按功能读取 |
| Derived | 计数、健康等级、脱敏指标 | 可最小化发送给 AI |
| Sensitive | 日志、SMART 原文、仓库文件内容 | 浏览器内处理,不持久化 |
| Secret | Token、Cookie、私钥、密码 | 拒绝处理并提示移除 |
- 在采集前限制文件、行数、时间窗和大小;
- 在网络请求前先映射到允许字段,再脱敏;
- 未知字段默认丢弃,不透传;
- URL 仅保存 Lab ID 和无敏感的 UI 状态;
- Local Storage 默认不保存用户输入;
- 剪贴板、下载和分享必须由用户主动触发;
- Analytics 和错误追踪禁止携带输入与输出正文。
公共实现位于 @margrop-labs/redaction,无网络、存储或日志副作用。所有需要跨越浏览器本地边界的数据必须遵循:
- 使用操作专属的允许字段策略读取不可信对象,未知字段默认丢弃;
- 校验允许字段的类型、长度、数量和数值范围;
- 对自由文本中的 IP、域名、邮箱、序列号和 WWN 使用不可逆占位符;
- Authorization、Token 和 Cookie 默认拒绝,只报告类型和策略路径;
- 仅把净化后的新对象传入 URL、日志、Analytics、AI 请求或导出。
URL、日志和 Analytics 不应包含自由文本,即使文本已经脱敏。它们只允许稳定的 Lab ID、事件名、错误码、状态码、耗时和数值计数。AI 请求与用户主动触发的导出可以包含操作必需的已脱敏文本。
脱敏报告只包含敏感类型和命中数量,不包含原值、位置、长度、哈希或部分字符。“没有检测到”不是安全证明;业务 Schema、字段允许列表、Secret 禁止字段和服务端密钥隔离仍然是主防线。
每个 Lab 页面明确显示:
- 本地处理什么;
- 会向服务端发送什么;
- 是否调用 AI;
- 是否存储;
- 如何清除当前会话。