个人信息脱敏审查(privacy-audit)
把「这份技能 / 代码库 / 数据集能不能发布」从主观判断,变成有分级、有法规依据、可接入 CI 的门禁结论。
定位
对技能包 / 代码库 / 数据目录执行个人信息脱敏合规审查,产出分级问题清单与标准审查报告。基于中国法域:《个人信息保护法》(主席令第91号)、《数据安全法》、《网络安全法》(2025修正)、GB/T 35273-2020、GB/T 45574-2025、GB/T 43697-2024、《个人信息保护合规审计管理办法》等。审查从严:凡无明确依据允许的处理一律按「不得」执行。
定位区分:本技能是「审查 / 审计」(发现 + 分级 + 整改建议 + 依据索引),不是「脱敏执行器」——负责在事前判定「该不该发、哪里违规、依据哪条法规」;要直接掩码 / 替换数据请用脱敏工具类技能。
何时用(适用 / 不适用)
- 用它:技能 / 代码 / 文档发布前安全检查;数据集对外分享前脱敏核验;日志与配置泄露排查;合规审计报告产出;Agent 会话记录落盘面的自查(会话里有没有凭据明文 / 要不要清理会话)。支持对话式场景——上传附件或粘贴文本即可扫描,无需本地目录。
- 不用它:要直接掩码 / 替换数据;要出具法律意见(本技能只给合规判据与依据索引,执业判断须由律师给出);与被审内容无关的功能缺陷排查。
触发词
- 脱敏审查 / 隐私审查 / 隐私合规检查 / 合规审查 / 隐私保护审计 / privacy audit / desensitization audit
- 敏感信息扫描 / PII 扫描 / PII scan / 敏感字段检测 / 个人信息扫描 / 数据泄露排查
- 扫描这个目录有没有个人信息 / 扫描这个技能有没有个人信息
- 身份证号扫描 / 检查代码里有没有手机号 / 代码里有没有身份证号 / 银行卡号泄露检查
- 仓库里有没有硬编码密钥 / 日志里有没有明文密码 / 上传文件有没有敏感信息
- 这个技能有没有泄露隐私 / 这个技能能不能发布 / 分享前要不要脱敏 / 数据集脱敏核查
- 脱敏整改建议 / 出一份合规审查报告 / 发布前安全检查 / 上架前合规审查
- 会话记录 / 会话记录里有凭据吗 / 会话里有没有明文密钥 / 清理会话 / 清空会话记录 / 删会话记录
- 凭据泄露 / 凭据泄露排查 / key 泄露自查 / 我粘贴过 token / 私钥有没有落盘
- 健康数据不出机 / 体检数据在会话里吗 / 我的对话记录里有什么敏感信息
Goal(可验证输出物)
一次审查跑完应交付三样东西:
- L1 扫描结果 —— 退出码 + 命中清单(
--json结构化供 CI 消费 /--html自包含可视化); - 分级问题清单 + 检查清单对照表 —— P0 / P1 / P2 逐条给「问题 / 位置 / 依据(法规或国标条款)/ 整改动作」,33 项清单逐项勾选、未勾项写明原因;
- 结论 —— 明确「可发布 / 需整改 / 禁止发布」,附免责声明与依据时效性口径(用了核验则给溯源 URL,否则注明「依据未经实时核验」)。
Inputs(必填 / 可选)
- 必填:待审对象——目录 / 单文件 / 文本片段(对话场景可直接粘贴)。
- 可选:审查级别(默认先跑 L1,再按需做完整审查);报告输出目录(必须在扫描目录之外);是否启用法条原文实时核验(需运行环境提供法律检索能力)。
Constraints(不做什么 + 质量门槛 + 逃逸条款)
- 不处理:脱敏执行(掩码 / 替换)、法律意见出具、与被审内容无关的功能缺陷。
- 质量门槛:① 每条问题必须指到具体位置 + 具体依据,不接受「感觉有风险」;② 命中 ≠ 泄露——正则误报须抽样甄别,报告里分开计数;③ L1 退出码是硬判据(
0通过 /1高危禁止发布 /2需人工确认),不得用「人工看过一遍」替代。 - 不硬编码平台路径:脚本路径用环境变量传入,文档与命令不写本机绝对路径。
- 待审内容不出本地:扫描与审查全程本地完成;唯一外部调用是可选的法条核验,且只外发法规名称与条号。
- 逃逸条款:当本文件的规则与用户明确意图冲突或不适用时,优先保障用户数据与意图,并显式说明偏离理由与替代动作,不得静默偏离。
Steps(读取 → 处理 → 验证)
# 依赖:Python 3.8+,纯标准库,无第三方依赖
export SKILL_DIR=<本技能安装目录> # scripts/ 与 references/ 所在目录
export TARGET_DIR=/path/to/待审查目录 # 代码 / 技能 / 数据
export REPORT_DIR=/path/to/报告输出目录 # 必须在扫描目录之外,避免自我命中
第一步:L1 自动扫描(先机器,后人工)
# 单目录扫描 + JSON 报告
python3 "$SKILL_DIR/scripts/privacy_audit.py" "$TARGET_DIR" \
--rules "$SKILL_DIR/scripts/字段检测正则库.json" \
--json "$REPORT_DIR/audit_result.json"
# 批量目录扫描(多个目录合并审计)+ HTML 可视化报告
python3 "$SKILL_DIR/scripts/privacy_audit.py" "$TARGET_DIR_A" "$TARGET_DIR_B" \
--rules "$SKILL_DIR/scripts/字段检测正则库.json" \
--json "$REPORT_DIR/audit_result.json" --html "$REPORT_DIR/audit_result.html"
- 扫描 17 类敏感字段:身份证号 / 手机号 / 银行卡号 / 邮箱 / IP / 精确地址 / 精确定位坐标 / 医师署名 / 医院机构名 / 密码明文 / 医疗健康信息 / 未成年人信息 / 车牌号 / 护照号 / 微信号 / QQ 号 / 统一社会信用代码
- 检测 5 类硬编码凭证:SkillHub key / GitHub token / OpenAI key / 腾讯云 SecretId / COS 临时凭证
- 退出码(可直接接入 CI 门禁):
0=通过;1=高危命中(禁止发布);2=中敏感命中(需人工确认) --json输出结构化结果(扫描根 / 汇总 / 判定 / 命中明细);--html出一页自包含报告(总览 + 分级分布 + 按文件分组清单,离线可看)--strict:一般级别命中也判失败;--quiet:仅输出结果行
对话式扫描(无需本地目录):用户上传附件或粘贴文本即可审查。
# 单文件(上传的附件,如 .py/.md/.json/.txt 等文本文件)
python3 "$SKILL_DIR/scripts/privacy_audit.py" --file /path/to/uploaded.py \
--rules "$SKILL_DIR/scripts/字段检测正则库.json" --json "$REPORT_DIR/audit_result.json"
# 文本片段(用户粘贴的代码 / 文本)
python3 "$SKILL_DIR/scripts/privacy_audit.py" --text "待审文本内容" \
--rules "$SKILL_DIR/scripts/字段检测正则库.json"
# 标准输入(管道传入)
echo "待审文本" | python3 "$SKILL_DIR/scripts/privacy_audit.py" --stdin \
--rules "$SKILL_DIR/scripts/字段检测正则库.json"
第二步:L2 完整审查(六维度人工对照)
以 references/个人信息脱敏审查规范.md 为执行依据,逐维度对照:
- 识别与分类:字段清单是否完整、敏感级别标注、组合重标识风险、未成年人特别标注
- 脱敏方式与场景:去标识化 / 匿名化选择是否与敏感度匹配(不可逆优先;可逆必须密钥管控)
- 字段级脱敏:逐字段核对存储 / 展示 / 传输 / 共享四环节(重点:身份证 / 银行卡必须加密存储;界面默认掩码;日志不得留明文)
- 流程与检查清单:33 项清单逐项勾选(前置识别 / 存储 / 展示 / 日志 / 共享 / 测试 / 技术保障七组,明细见规范)
- 违规场景排查:15 项高频违规场景逐项排查(明文存储、界面未掩码、超范围收集、自动勾选同意、强制人脸、日志明文、泄露未通知、开盒买卖、跨境未评估等)
- 合规依据核验:法规名称 / 文号 / 日期与国标编号以规范第六部分为准,不得改动;如需核对法条原文与现行时效性,走下一步的可选核验
第二步可选:法条实时核验(无此能力则跳过)
第六维度的法规索引是内置静态依据表;若运行环境提供法律检索能力(如北大法宝 pkulaw),可在出报告前把「依据」升级为可溯源的实时核验结果。这是增强项,不是必选项——无连接器时按静态表出报告,结论依然成立。
- 取法条原文:传法规全称 + 中文条号(如「第五十一条」)→ 得原文 + 时效性 + 可写进报告的溯源
url;条号粒度只到「条」,「条第 x 项」须取回整条后人工定位。 - 查时效与文号:传法规名关键词 + 时效过滤;返回字段名与入参不同名,勿按入参名取值;结果需按标题与效力位阶二次筛选。
- 修订法须查带「(2025修正)」这类后缀的条目,否则会命中已被修改的旧版。
- 边界:核验只外发法规名称与条号,不含任何待审内容。
第三步:整改与验证
- 高风险(P0)必须修复:移除硬编码凭证 → 环境变量 / 密钥管理;明文敏感数据 → 加密存储 + 掩码展示
- 修复后重跑 L1 扫描,确认退出码降为 0(或仅剩低风险)
- 中风险(P1)建议下轮迭代修复;低风险(P2)记录后续优化
第四步:输出标准报告
以 references/审查报告模板.md 为结构生成报告:审查对象与数据画像 → 结果总览 → 分级问题清单(P0/P1/P2)→ 合规项核验 → 整改优先级 → 检查清单对照表 → 结论与免责声明。
会话记录审计(独立子场景:Agent 会话自身的落盘面)
审查对象不止代码库——Agent 自己的会话记录本身就是一份高敏感落盘数据集:会话 .jsonl 存有完整对话(prompt / 工具入参 / 工具输出全文 / 推理 / 回复全文)。凡在会话里读过凭据文件、粘贴过 key / token、贴过私钥或身体指标,明文就随对话一起落了盘,而客户端自带的敏感信息保护只覆盖极少数行。L1 目录扫描按默认用法不覆盖这个面 ⇒ 「会话记录 / 凭据泄露 / 清理会话」类请求单独走本节(完整 SOP → references/会话记录审计.md)。
四条必做动作(穷举关联文件 / 连 subagents/ 同清 / 用 rmdir 收尾而非 rm -rf / 删后跑采集做交叉校验)与完整命令 → references/会话记录审计.md。
三条硬提醒:① 命中 ≠ 泄露(正则误报率高,须抽样甄别,报告分开给「命中数」与「泄露数」);② 健康数据是第二个面(体检「指标 + 数值」命中量远超前一类 ⇒ 未定口径前只登记、不清理);③ 优先级不可倒置 = 轮换凭据 →(定健康数据口径)→ 再议清理(凭据轮换后落盘旧值即失效,不必为凭据而删会话)。
> 删除不可逆:未经明确批准只做只读盘点;获批后先列影响面再执行,且不动历史记录(只删,不改写日志与归档)。
凭据泄漏排查(零明文模式)
默认的 privacy_audit.py 命中时会带出 snippet(命中原文片段)。当被扫对象本身可能装着凭据(记忆文件 / 日志 / 会话记录 / 命令快照)时,snippet 会把密钥明文复制进报告——审查动作反而制造出新的泄露面。 这类请求改走 scripts/credential_leak_scan.py:零明文输出(只含 文件 / 行号 / 规则名 / 计数)、双通道(形态规则 + 与本地凭据库精确值比对)、退出码沿用 L1 约定;一键运行 bash scripts/run_credential_leak_scan.sh {memory|logs|sessions|memory+logs|all}。
> ⚠️ 三条铁律(① 不为「确认一下」去 cat 凭据文件 ② 报告输出目录必须在被扫目录之外 ③ 命中须按坐标人工确认为真实值后再定性)与完整参数(TARGET= / KEYS= / OUT= / PY_BIN=)→ references/凭据泄漏排查.md。
Verification Checklist
- [ ] L1 退出码已确认(
0/1/2),未用主观判断替代 - [ ] 每条命中已抽样甄别,报告分开给出「命中数」与「泄露数」
- [ ] 分级清单每项都有具体位置 + 具体依据(法规 / 国标条款)
- [ ] 报告输出在扫描目录之外,未落进待发布产物
- [ ] 33 项清单与 15 项违规场景逐项对照过,未勾项写明原因
- [ ] 扫描文件数为 0 时,结论写的是「无标的信息」而非「未发现个人信息」
- [ ] 扫凭据落盘面(记忆 / 日志 / 会话)时用的是零明文脚本,报告内不含任何密钥明文
常见错误与已知误报
| 现象 | 说明 | 处理 |
|---|---|---|
| 坐标常量、长小数、时间戳 + 序号等随机数字串被报为身份证 / 银行卡 / 统一社会信用代码 | 校验算法只保证「格式合法」,不保证「真实存在」,随机串天然有一定概率通过 | 人工确认为序号 / 时间戳 / 流水号后忽略;不为此放宽规则(宁可提示确认,不漏报) |
| 一处身份证号内部的数字又被报为手机号 / 银行卡 | 高优先级命中内部的子串 | 已内建区间去重,一般不重复报;若仍有,按同一处问题计 |
| 规则库自身的定义文本被命中(如医院名规则里出现「人民医院」字样) | 规则定义本身就是敏感词样本 | 属正常现象,确认为规则定义后忽略 |
| 报告落在扫描目录里,下一次扫描把自己命中;或拿「命中数」当泄露数上报 | 报告内容本身就是命中样本的集合;正则误报会放大结论 | 报告输出目录必须在被扫目录之外;结论只依据抽样甄别后的口径 |
用 privacy_audit.py 去扫记忆 / 日志 / 会话记录 |
命中会连 snippet(原文片段)一起写进报告,等于把凭据明文抄进新文件 | 这类对象改用 credential_leak_scan.py(零明文,只出坐标) |
| 目录里没有任何文本对象,报「0 命中 / PASS」就当成「已合规」 | 退出码 0 的成因是没有扫描面,不是扫过了没命中;两者证据强度完全不同,容易被当作安全结论误用 | 报告须同时给出「扫描文件数」与文件穷举清单;scanned_files = 0 时结论只能写「无标的信息」,不能写「未发现个人信息」 |
使用示例(对话模拟)
用户:帮我审查一下 ~/projects/skill-demo 这个目录,能不能发布?
Agent:
1. 跑 L1:python3 "$SKILL_DIR/scripts/privacy_audit.py" ~/projects/skill-demo \
--rules "$SKILL_DIR/scripts/字段检测正则库.json" --json ~/reports/demo_audit.json
2. 退出码 1 → 命中 2 处高危(GitHub token 硬编码 + 身份证明文)→ 判定禁止发布
3. 对照《审查规范》做六维度核对:存储未加密、展示未掩码、日志含明文…
4. 输出分级清单(H-1 硬编码 token / H-2 身份证明文存储 / M-1 日志明文)+ 整改建议 + 报告
5. 修复后重跑 L1 → 退出码 0 → 允许发布
参考文档(何时读哪个)
| 文件 | 内容 | 何时读 |
|---|---|---|
references/个人信息脱敏审查规范.md |
完整六维度规范:L1/L2 分层、33 项清单、15 项违规场景、18 部法规 + 6 项国标索引 | 做完整审查时(执行依据) |
references/个人信息脱敏审查要点.md |
六维度要点与法规背景(来源档位:官方规范 / 社区共识) | 需要判断依据的来龙去脉时 |
references/审查报告模板.md |
标准报告结构模板 | 出报告前 |
references/会话记录审计.md |
会话记录落盘面专项 SOP:落盘途径、清理步骤、误报甄别、健康数据口径、优先级决策 | 处理「会话记录 / 凭据泄露 / 清理会话」时 |
references/凭据泄漏排查.md |
零明文凭据排查细节:双通道、输出与退出码口径、一键运行参数、三条铁律 | 扫「记忆 / 日志 / 会话」这类可能自带凭据的对象时 |
references/Changelog.md |
完整版本历史 | 问「这版改了什么 / 历史版本」时 |
evals/ |
可执行评测用例集(扫描用例 + 触发词意图集) | 验证扫描能力是否符合预期时 |
免责声明
本技能由 AI 辅助生成,仅供参考,不构成正式法律意见,不能替代具有执业资格的律师。具体合规判断应结合业务场景咨询专业法律人员,并以最新生效法律法规为准。