基线
master 4b3f236 (2026-08-30);hub-server + edge-server 全部结构化日志打点(slog)
执行者:captain 主线收口(三次 lane 会话未完成合成,由主线以定向 grep 实证完成;lane 扫描记录存 lanes/lane-e2-log-secrets-audit/)
与 secret-guard(scripts/verify/check-secrets.sh)区别:secret-guard 拦代码字面量,本审计针对运行时日志
高风险模式核查结果(定向 grep 实证)
模式
结果
slog 字段名含 token/secret/password/api_key/authorization 且值为秘密本体
零命中
出站请求日志带 Authorization 头/API key
零命中
env 值(非键名)进日志
零命中 (main.go:120 .env 加载失败只打 key 名)
OIDC state/code 打点
state 已截断前 8 字符(oidc.go:152/258),合规
发现清单(按严重度)
🟡 P2:Edge dispatch 非成功响应原文进日志
hub-server/internal/service/dispatchsvc/agent_dispatch_edge_http.go:108:slog.Warn(plan.LogMessage, ..., "body", string(respBody))
值来源:Edge HTTP 响应体(已受 EdgeHTTPResponseBodyLimit LimitReader 截断——有界但未脱敏 )
风险:Edge 错误响应可能含任务上下文/错误详情,截断不等于脱敏;非成功路径才触发,频率低
建议:只记 body 长度+前 N 字节摘要,或过统一 mask 助手
ℹ️ 系统性观察:无全局脱敏层
hub/edge 均用裸 slog.NewJSONHandler/NewTextHandler(edge main.go:146-150),无 masking handler
当前靠开发者自觉(已有多处好样例:oidc state 截断、[安全/边缘] Edge 安全机制覆盖面盘点(宏观§6 资产核查) #2098 env 告警只打键名、cache 日志只打键名)
建议:引入轻量 mask 助手(对 token/secret/authorization 字段值统一 ***),新打点走约定;不急于全局改造
未覆盖(留后续)
消息/事件 payload 全量打点逐 handler 穷举(本轮按模式 grep 覆盖,非逐行穷举)
前端/桌面客户端日志面(不在本审计范围)
gin 请求日志中间件若未来启用 body 记录,需重审
修复切片建议(≤3)
dispatch 非成功响应 body 改摘要式日志(1 行改动+测试)
引入 slog mask 助手 + 字段命名约定(token/secret 类字段强制过 mask)
在 AGENTS.md/开发规范固化「日志只打标识符不打本体」纪律(引用本 issue)
Refs #2098 (edge env 告警纪律前置)
基线
高风险模式核查结果(定向 grep 实证)
发现清单(按严重度)
🟡 P2:Edge dispatch 非成功响应原文进日志
hub-server/internal/service/dispatchsvc/agent_dispatch_edge_http.go:108:slog.Warn(plan.LogMessage, ..., "body", string(respBody))EdgeHTTPResponseBodyLimitLimitReader 截断——有界但未脱敏)ℹ️ 系统性观察:无全局脱敏层
slog.NewJSONHandler/NewTextHandler(edge main.go:146-150),无 masking handler***),新打点走约定;不急于全局改造未覆盖(留后续)
修复切片建议(≤3)
Refs #2098(edge env 告警纪律前置)