win 9156585a23 chore: gofmt/goimports 后处理
合并上游后统一运行 gofmt/goimports,消除排序差异与空行不一致。
2026-04-24 11:52:53 +08:00

60 lines
1.7 KiB
Go
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package routes
import (
"encoding/json"
)
// sensitiveKeys 需要从 event_logging payload 中剥离的字段。
// 逆向自 Claude Code v2.1.92
// - baseUrl/baseURL — c8().BASE_API_URL暴露 ANTHROPIC_BASE_URL网关地址
// - api_base_url — 备选 API base 字段名
// - serverUrl — MCP/WebSocket 服务器地址
// - gateway — 网关标识
// - apiHostRequestHeaders — 上游请求头(含 Host
var sensitiveKeys = map[string]struct{}{
"baseUrl": {},
"baseURL": {},
"api_base_url": {},
"serverUrl": {},
"gateway": {},
"apiHostRequestHeaders": {},
}
// sanitizeEventBatch 清理 event_logging batch payload 中的敏感字段,
// 防止网关地址泄露,同时保持遥测流量正常(避免"零遥测"异常触发检测)。
//
// 实现:反序列化 → 递归删除任意深度的敏感 key → 重新序列化。
// 单次解析+序列化,比 N×M 次 gjson/sjson 操作更高效。
func sanitizeEventBatch(body []byte) []byte {
var payload interface{}
if err := json.Unmarshal(body, &payload); err != nil {
return body // 非法 JSON 原样转发,不阻塞
}
stripKeys(payload)
out, err := json.Marshal(payload)
if err != nil {
return body
}
return out
}
// stripKeys 递归遍历任意 JSON 结构,删除匹配 sensitiveKeys 的字段。
func stripKeys(v interface{}) {
switch node := v.(type) {
case map[string]interface{}:
for k := range node {
if _, hit := sensitiveKeys[k]; hit {
delete(node, k)
} else {
stripKeys(node[k])
}
}
case []interface{}:
for _, item := range node {
stripKeys(item)
}
}
}