def scrub(event, hint):
    h = event.get('request', {}).get('headers', {})
    for k in list(h):
        if k.lower() in ('authorization', 'cookie', 'x-api-key'):
            h[k] = '[Filtered]'
    return event

线上报错在 Sentry 里点开一条事件,request.headers 里 Authorization 是完整的 Bearer 串,连带 Cookie 和 X-Api-Key 都在。一周内这类事件累计三十多条。这类现象通常不是突然出现的,往前翻半天日志能看到苗头。

追下去是这么回事:上报 SDK 默认会带上完整请求,请求头没有过滤规则。异常又恰好发生在鉴权之后,头部信息齐备。事件还被转发到邮件和群机器人,token 的扩散范围比日志更大。

「错误上报脱敏」确认了原因之后,改动尽量只碰那一处,顺手改的东西后面最容易出问题。权限不要一口气开到最大,先加到够用再往上试,范围小才好收。

把复现步骤压到三条以内,交给同事也能跑出来,才算真的定位清楚。

处理上按这个顺序:SDK 初始化时配 before_send 把 headers 和 body 里的敏感键替换掉;请求头只保留 user-agent 和 trace id 这类无敏感值;已经上报的事件按时间范围清理 同时吊销这段时间内的 token;把脱敏规则写进项目模板 新项目默认带上。

确认没问题再收工,故意抛一个异常 事件详情里三个头都显示 Filtered 事件仍能定位到具体代码行。

作者 9823189