API 数据最小化与日志安全
公开客户端会接触账号、访问码、记录、相片和机台状态。能够请求某项数据,不代表可以把它复制到日志、分析平台或聊天群。实现 API 时要把“能调用”和“能公开”分开。
数据分类
| 类别 | 示例 | 默认处理 |
|---|---|---|
| 会话凭据 | Token、密码、访问码、二维码文本 | 只放内存或受保护存储,不写日志 |
| 机台凭据 | 授权码、私钥、敏感标识 | 只交给授权维护人员 |
| 账号数据 | 用户名、记录、成绩、相片 | 只在本人/授权范围展示 |
| 配置数据 | 配方值、代理、服务 JSON | 只显示当前可见部分,写入前备份 |
| 运行状态 | 在线、磁盘、订单、网络摘要 | 脱敏后用于排障 |
| 公共聚合 | 地区统计、服务级计数 | 仍需避免反推个人 |
日志红线
以下字段不得进入普通日志、错误上报、浏览器控制台或截图:
token、密码、访问码和二维码文本;- 私钥、授权码和机台秘密;
- 完整请求体和完整响应体;
- 完整备份 JSON、服务 JSON 和 Hosts 内容;
- 图片、原始记录和含个人信息的页面;
- 能直接定位账号或机台的完整编号。
日志只保留脱敏别名、接口分类、状态码、耗时、业务结果和必要的错误消息。开发模式也必须遵守这条规则,不要依赖“本地不会上传”作为理由。
脱敏规则
字符串凭据
显示长度和前后少量字符即可:
原值:<SECRET_VALUE>
日志:<前2位>…<后2位>(长度:N)对短值不要显示前后字符,直接记录“已提供/未提供”。二维码和访问码优先只记录哈希或随机追踪号。
账号与机台
使用本地生成的稳定别名,例如 account-a、machine-b。不要把别名算法建立在真实编号、手机号或用户名上,避免从日志反推原值。
地址和路径
只记录域名类别或路径模板,删除查询参数、凭据、完整本地路径和用户目录。服务 JSON 中的敏感值必须整体替换,不能只遮住一部分。
浏览器存储
账号列表、Token 和本地导入导出文件应按照设备可信程度处理:
- 个人设备可以保留本地条目,但要启用系统锁屏;
- 公共设备使用后退出并清理站点数据;
- 导出文件视为凭据,不放公开网盘或群文件;
- 删除本地条目不等于删除服务端数据;
- 清除浏览器图片缓存不等于删除服务端相片。
登录弹窗关闭后应清理临时二维码图片和识别中间结果;不要把二维码图片保存在下载目录太久。
传输与缓存
使用 HTTPS 和受保护的 API 基础地址。客户端不要把 Token 放在 URL 查询参数、Referer、分析事件名或错误消息里。文件下载对象 URL 在使用后释放,避免敏感图片长期留在浏览器内存。
服务器返回的缓存、记录和相片只能保存到用户明确选择的受保护位置。缓存命中时仍要确认当前账号,不能把上一个账号的数据直接显示给新账号。
分享排障信息
分享前逐项检查:
- 截图是否包含二维码、用户名、地址或现场人员;
- 日志是否包含请求体、完整 URL 或响应原文;
- 备份是否包含账号数据;
- 订单包是否包含路径、密钥或未公开内容;
- 时间、机台和账号是否可以被第三方关联。
只分享最小片段,并在问题关闭后删除临时副本。若必须交付原始文件,使用授权的加密传输渠道,不要粘贴到群聊。
数据删除与保留
删除前区分三件事:
- 浏览器缓存清理:只影响本地显示;
- 本地账号条目删除:只影响当前设备的登录入口;
- 服务端相片、上传快照或缓存删除:可能不可逆。
删除服务端数据前先下载留档、确认目标名称并要求二次确认。操作超时后先重新读取列表,不能把删除请求自动重放。
第三方 SDK 与遥测
如果客户端使用错误收集、统计或分析 SDK:
- 默认关闭请求体和响应体采集;
- 过滤 URL 查询参数和请求头;
- 过滤表单字段名中包含凭据的条目;
- 对图片、备份和记录禁止自动上传;
- 文档中明确采集范围、保留时长和删除方式。
没有经过用户同意和授权的第三方,不应收到账号数据或机台状态。
安全事件
如果怀疑凭据泄露:
- 停止继续使用泄露值;
- 通知账号所有者或管理员;
- 按要求失效、轮换或重新绑定;
- 删除聊天、下载目录和临时日志中的副本;
- 重新登录并做一次最小验收;
- 记录泄露范围和处理时间。
不要把泄露值再次贴给管理员“帮助确认”,也不要通过重复登录测试它是否还能用。
