敏感值泄露或缺失
敏感值问题有两种相反表现:模型看到了不该看的原文,或动作需要值却拿到了遮罩。先确认该字段本来属于哪种暴露模式,再查执行时还原和出站脱敏。
三种模式
| 模式 | 模型看到 | 动作拿到什么 | 用途 |
|---|---|---|---|
hidden | [hidden] | 不可使用 | 只表示字段存在 |
masked | 有损遮罩 | 不可还原 | 人可核对尾号 |
token | 短期代号 | 执行时还原真值 | 动作确实需要该值 |
hint | 类型说明 | 不可使用 | 让模型理解字段含义 |
默认是 hidden。如果动作需要真实手机号,应使用 token 并保护动作,而不是把遮罩值传给业务函数。
泄露排查
- 检查记录、状态、反馈与错误消息是否都经过同一敏感性声明。
- 检查业务函数是否把真值拼进
message;出站脱敏应作为安全网,不是唯一防线。 - 检查应用自己的日志、APM、analytics 与 URL 参数;框架边界之外的泄露不会被自动处理。
- 检查工具回执、调试面板与审计事件是否包含原始参数。
- 检查 token 是否被写入 localStorage、跨会话 URL 或第三方服务。
- 检查
sensitive()是否嵌套在对象里导致未被识别。
缺失排查
- 确认字段使用 token,而不是 masked/hidden。
- 确认 token 与当前页面会话匹配;刷新后旧代号可能失效。
- 确认动作参数仍是对象,并且 schema 没有把代号误判为非法格式。
- 确认业务函数读取的是执行器还原后的参数。
- 确认工具错误没有被过度脱敏到无法诊断;使用记录 id 或字段名定位。
未知或伪造 token 必须在执行前被拒绝。不要在业务函数里自行解析 {p:...},那是执行器职责。
审计与调试
调试面板可以显示代号或遮罩,不应显示原文。审计只保留记录 id、能力、结果和公开审批 id,不保留完整参数。
验收标准
- 同一字段在记录、状态、反馈和错误中遵循同一规则;
- 遮罩值不可用于写入;
- token 只在当前页面会话内有效;
- 伪造 token 被拒绝且业务函数未执行;
- 应用日志与分析系统不收集原文;
- 调试面板、审计与模型上下文都不泄露 token 原值。

