问题修复
在展示或记录 Agent 输出前脱敏凭据、PII 和内部信息
任何需要把 AI/Agent 响应展示给用户或写入日志、并防止意外泄露敏感信息的场景。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 49/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 85/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 60/100 ×0.15
适用场景
在展示或记录 Agent 输出前脱敏凭据通用
解决思路
- 在 agent 响应展示给用户或写入日志前,扫描输出中是否意外泄露敏感信息,并执行脱敏。
- 凭据和密钥分类的敏感值统一替换为 `[REDACTED]`。
- AWS Access Key:匹配 `AKIA[0-9A-Z]{16}`,替换为 `[REDACTED]`。
- AWS Secret Key:匹配 access key 后 40 字符 base64 值,替换为 `[REDACTED]`。
- OpenAI API Key:匹配 `sk-[a-zA-Z0-9]{48}`,替换为 `[REDACTED]`。
- Anthropic Key:匹配 `sk-ant-[a-zA-Z0-9-]{80,}`,替换为 `[REDACTED]`。
- GitHub Token:匹配 `ghp_[a-zA-Z0-9]{36}`,替换为 `[REDACTED]`。
- Generic Passwords:匹配 `password\s*[:=]\s*['"][^'"]+['"]`,替换为 `[REDACTED]`。
- Private Keys:匹配 `-----BEGIN.*PRIVATE KEY-----`,替换为 `[REDACTED]`。
- JWT Tokens:匹配 `eyJ[a-zA-Z0-9_-]+\.eyJ[a-zA-Z0-9_-]+`,替换为 `[REDACTED]`。
- Database URLs:匹配 `<db-scheme>://[^\s]+`,替换为 `[REDACTED]`;`<db-scheme>` 通常包括 `postgres`、`mysql`、`mongodb`。
- Email addresses:隐藏 local part,如 `j***@example.com`。
- Phone numbers:隐藏数字并保留最后 4 位,如 `+1 (***) ***-1234`。
- SSN / National IDs:完全脱敏为 `[SSN REDACTED]`;匹配任何带连字符的 9 位模式。
- Credit card numbers:脱敏为 `****-****-****-1234`,保留最后 4 位。
- Private IP addresses:通常作为配置保留原样,如 `192.168.1.1`。
- Public IP addresses:根据上下文评估,可能需要脱敏。
- Full home directory paths:把 `/Users/john/` 替换为 `~/`。
- Internal hostnames:替换为 `[internal-host]`。
- Internal URLs/endpoints:把域名替换为 `[internal]`。
- Stack traces with internal paths:简化为相对路径。
- Docker/container IDs:截断为前 8 个字符。
- 当 agent 输出代码片段时,检查硬编码连接字符串。
- 当 agent 输出代码片段时,检查配置对象里的 API keys。
- 当 agent 输出代码片段时,检查环境变量默认值里的 passwords。
- 当 agent 输出代码片段时,检查源码中嵌入的 private keys。
- 当 agent 输出代码片段时,检查带 token 的 webhook URLs。
- Step 1 Scan:对输出文本运行所有检测模式。
- Step 2 Classify:Critical(凭据、私钥、token)始终脱敏。
- Step 2 Classify:High(PII、database URLs)除非明确调试,否则脱敏。
- Step 2 Classify:Medium(内部路径、hostnames)泛化处理。
- Step 2 Classify:Low(非敏感但内部)保留但标记。
- Step 3 Redact:替换敏感值同时保留上下文。例如 `postgres://admin:s3cr3t_p4ss@db.internal:5432/prod` -> `postgres://[REDACTED]@[REDACTED]:5432/[REDACTED]`。
- Step 3 Redact:例如 `/Users/john.smith/projects/secret-project/src/auth.ts:42` -> `~/projects/.../src/auth.ts:42`。
- Step 4 Report:输出 `OUTPUT SANITIZATION REPORT`,包含 items scanned、redactions made。
- Step 4 Report:逐项记录等级、检测类型、行号、操作,如 `[CRITICAL] API Key detected and redacted (line 15)`、`Type: OpenAI API Key`、`Action: Replaced with [REDACTED]`。
- Step 4 Report:对 `[HIGH]` email 记录 `Type: PII - Email`、`Action: Masked local part`。
- Step 4 Report:对 `[MEDIUM]` path 记录 `Type: Internal path`、`Action: Replaced with ~/`。
- 始终宁可过度脱敏,误报好于泄露 secret。
- 绝不记录或存储原始敏感值。
- 脱敏后保持可读性,输出仍应能理解。
- 如果整个响应都敏感(如 dump `.env`),用警告替换,而不是逐项脱敏。
- 用户明确要求查看代码中的值(如 "show me my .env")时,不要脱敏,但要警告用户。
适用边界 · 注意事项
- 当用户明确要求查看敏感值(如 "show me my .env")时,不应直接脱敏,而应警告用户。
- 当整个响应本身都是敏感内容(如 dump `.env`)时,不应逐项脱敏后展示,应替换为警告。
- 私有 IP 地址通常作为配置保留原样,除非上下文要求,否则不属于需要脱敏的目标。