docs: record single form privacy fix and fixed deployment evidence

This commit is contained in:
2026-10-10 05:31:19 +08:00
parent 1202b9acc9
commit dd98df8cb4
3 changed files with 16 additions and 2 deletions
@@ -1,6 +1,18 @@
# Dispatcher / Agent Logrus Debug 实现与固定环境部署
## 最终已安装版本:a66e111(2026-10-10 04:53 CST 现场)
## 最终已安装版本:1202b9a(2026-10-10 05:27 CST 现场)
第九次审查的合法单字段URL编码表单泄漏已根因修复:`redactForm` 不再要求 `&`,一对与多对字段使用同一标准百分号解码和敏感分类,并接入共享 `cleanString` 覆盖普通/Debug error/detail,不仅HTTP正文。裸flag是合法空值字段;逐key/value解码失败明确以 INVALID_FORM 标记隐藏该字段,不回退整个原始表单、不撤销此前脱敏,其余真实诊断字段继续保留。只处理日志副本,传输字节不改。
新 `TestPercentEncodedSingleAndMixedFormsKeepWireBytesAndHideSecrets` 七种单字段token/messages、多字段、坏key、坏value、bare flag、坏字段在敏感字段之前/之后形态×两模式,通过真实HTTP请求/响应观察器与error/detail验证秘密排除、task_id/status保留及INVALID_FORM可见,实际服务器收到和客户端读到的原始bytes完全相等。先运行失败复现,再实现通过;此前全部JSON相邻诊断、quoted标签/Unicode名字、持续归属、字段分类、>150KB不截断与认证/PEM等回归保持。
最终源码 `1202b9acc96e31d0dc2bd0a7e80e22e0de8f5ea6` 已推送核对main,从干净固定提交构建安装。最终make check/release-check-local(格式/合同Proto/vet/全包race/build/实际隔离RabbitMQ HTTPS mTLS及现有验收对照)、Python21通过,业务覆盖率 **72.2%**;记录 `.local/form-final-check.log`、`.local/form-coverage.log`、`.local/form-release-check.log`。
2026-10-10 05:27 CST实际现场:Agent `2903610`/Dispatcher `2903622` 两实际SHA256 `1fcb84b17d6459c592021e224b4b5e622fcfde115f8a74f334c07261193f24f8`,enabled+active/running、0重启、实际Debug无Capture;Asterisk `777461` 不变,通道/tcpdump0。严格登记SSH指纹,关D新准入并只读确认零活动/未知执行/恢复阻断才部署;无reset/迁移/Asterisk重启/抓包/独立拨号/主动投递/额外AI OSS。
实际14HTTP请求响应200、两端各8DebugRPC正文、仅LogrusJSON、0error/redaction_error/已观测敏感字段签名URL泄漏、13隐藏标记。现场无非JSON/form正文/MQ业务/呼叫/真实恢复故障,新增表单反例仅本地真实HTTP断言,不伪造这些或业务/生产签收;独立probe仍saas_pending/business_ready=false。私密摘要本机 `.local/logging-deployment/form-{preflight,deploy,field-summary}.json`(文件0600目录0700)。源码/最终文档权威仍干净隔离main `.local/logging-isolated`,根并行修改保留;以下旧版仅历史。
## 上一版部署记录:a66e111(2026-10-10 04:53 CST 历史)
第八次审查的带引号内容标签未建立归属已根因修复:文本标签与诊断投影共用同一个引号/非引号词法器、字段名解码与归一化入口。JSON 引号字段经标准 JSON 解码,Unicode 转义不能绕过内容分类;非法引号字段不能可靠分类时,其尾部保持隐藏。完整嵌入 JSON 保留结构边界,由既有结构化脱敏处理,不让自由文本词法器吞掉其相邻 reason/task_id 等诊断字段。
+1 -1
View File
@@ -25,7 +25,7 @@ Agent 的抓包开关独立为 `--capture`:只在显式开启时要求 `AGENT_
## 正文边界
密钥、Token、认证信息、完整 prompt/messages/transcript/text/content/结束语、原始 SIP 内容及音频不输出。敏感字段按键名隐藏,重复键逐个处理;其他 JSON 的空白、重复键和数字写法保留,原业务字节与对象不修改。内容字段仅一份分类表(含conversation/history及其别名),所有JSON、Markup、文本续行和标量路径共用;内容分类必定敏感,避免字段分类分离。内容标签在错误前缀之后也建立归属,保留其前失败原因,不以行首为唯一匹配位置。文本字段使用同一引号/非引号词法器与归一化入口,JSON 字段名转义经标准 JSON 解码后分类;非法引号字段不能可靠分类时,其尾部保持隐藏。完整嵌入 JSON 由结构化脱敏处理,不让文本词法器删除相邻的真实诊断字段。所有普通/Debug 日志的 message、error 和其他标量共用字段/对话保护;对话保护跨空行、任意说话者及未知/嵌套消息字段持续保持。自由文本没有可靠结构结束符时,内容标签拥有后续文本,不以任意字段或状态行推断结束;只逐行保留已校验类型的诊断数值、UUID、时间戳、已知状态,这些行不解除后续内容保护。结构化 JSON/Markup/form 仍按结构保留外部非敏感字段;named 敏感非 void 控件保护其包裹内容,void input 不影响后续普通节点。纯文本以 UTF-8 安全副本记录;敏感键值/多行提示词、Markup 的敏感标签/输入值、表单敏感字段排除,明确不属于内容字段的其他可读正文保留;自由文本内容标签后的未分界文字持续按内容处理,不猜测其已成为业务正文。HTTP 二进制和升级后的 WebSocket 流不进入正文日志。
密钥、Token、认证信息、完整 prompt/messages/transcript/text/content/结束语、原始 SIP 内容及音频不输出。敏感字段按键名隐藏,重复键逐个处理;其他 JSON 的空白、重复键和数字写法保留,原业务字节与对象不修改。内容字段仅一份分类表(含conversation/history及其别名),所有JSON、Markup、文本续行和标量路径共用;内容分类必定敏感,避免字段分类分离。内容标签在错误前缀之后也建立归属,保留其前失败原因,不以行首为唯一匹配位置。文本字段使用同一引号/非引号词法器与归一化入口,JSON 字段名转义经标准 JSON 解码后分类;非法引号字段不能可靠分类时,其尾部保持隐藏。完整嵌入 JSON 由结构化脱敏处理,不让文本词法器删除相邻的真实诊断字段。所有普通/Debug 日志的 message、error 和其他标量共用字段/对话保护;对话保护跨空行、任意说话者及未知/嵌套消息字段持续保持。自由文本没有可靠结构结束符时,内容标签拥有后续文本,不以任意字段或状态行推断结束;只逐行保留已校验类型的诊断数值、UUID、时间戳、已知状态,这些行不解除后续内容保护。结构化 JSON/Markup/form 仍按结构保留外部非敏感字段;named 敏感非 void 控件保护其包裹内容,void input 不影响后续普通节点。纯文本以 UTF-8 安全副本记录;敏感键值/多行提示词、Markup 的敏感标签/输入值、单字段和多字段表单共用百分号解码与敏感分类,并应用于普通/Debug 标量诊断;裸 flag 按合法空值字段处理。单个 key/value 解码失败以明确 INVALID_FORM 标记隐藏该字段,不回退输出原表单、不撤销此前脱敏,其余诊断字段保留。表单敏感字段排除,明确不属于内容字段的其他可读正文保留;自由文本内容标签后的未分界文字持续按内容处理,不猜测其已成为业务正文。HTTP 二进制和升级后的 WebSocket 流不进入正文日志。
自由文本里的 Authorization/Proxy-Authorization(包括 Basic/Digest)、Cookie、无字段名的私钥 PEM 块,以及错误里嵌入的 JSON 对象/数组和 quoted API key/Token,同样排除;已隐藏的 JSON 认证字段不删掉后面的非敏感业务原因。实际错误仍返回,原原因保留。非法 JSON、无法安全展开的嵌套数据或部分读取不能退回打印未经处理的正文:输出 `redaction_error`、字节数及 SHA-256。HTTP `body_complete=false` 只表示已观测部分,不能把它当作完整网络正文;原读取/关闭错误继续返回,不因日志改变重试、确认或业务结果。