1.7 KiB
1.7 KiB
架构决策:微信出站调用敏感日志边界
日期:2026-08-02
决策:微信接口异常只记录低敏诊断维度,不记录请求/响应原文
本体:rule:BR-AUTH-003
背景
jscode2session、getuserphonenumber 和 access_token 都涉及一次性 code、openid、手机号或 AppSecret。原异常分支曾把微信完整响应体或原始手机号写入日志,并把 Exception#getMessage() 拼入客户端错误文案。网络异常消息可能包含含 query 的请求 URI,从而间接暴露 AppSecret、access_token 或一次性 code;完整微信响应也可能包含手机号。
决策
- 微信出站日志只允许 HTTP 状态码、微信数值错误码和 Java 异常类型。
- 禁止把完整响应体、手机号、openid/unionid、access_token、AppSecret、
phoneCode/jsCode、含 query 的 URL 或异常消息作为日志参数。 - 网络或解析异常返回固定低敏文案;微信明确返回的业务错误仍可通过受控
errcode映射成可理解提示。 SensitiveLoggingContractTest扫描微信服务及相邻的身份、session、邀请和上传边界,阻止敏感变量、外部错误文案、异常消息或完整异常重新成为日志参数,并禁止把异常消息拼入客户端响应。
边界
- 该决策不降低线上可观测性;HTTP 状态、微信错误码、异常类型和现有请求级 trace 足以定位网络、凭据和 code 生命周期问题。
- 运维排障不得临时打开完整 HTTP body 或 query 日志。确需与微信支持协查时,只记录时间窗、匿名化请求关联和错误码。
- 微信真实 AppID/AppSecret 仍须在生产前轮换并由受控环境变量提供;本变更不读取、生成或验证真实凭据。