個人資料脫敏審查(privacy-audit)
用途
對本地技能包、程式碼庫、資料目錄執行個人資料脫敏合規審查,產出分級問題清單與標準審查報告。基於中國法域:《個人資訊保護法》(主席令第91號)、《資料安全法》、《網路安全法》(2025修正)、GB/T 35273-2020、GB/T 45574-2025(2025-11-01 實施)、GB/T 43697-2024、《個人資訊保護合規審計管理辦法》(2025-05-01 施行)等。審查從嚴:凡無明確依據允許的處理一律按「不得」執行。
適用場景:AI 技能/程式碼/文件發佈前安全檢查、資料集對外分享前脫敏核驗、日誌與配置洩漏排查、合規審計報告產出。 定位區分:本技能是「審查/審計」(發現 + 分級 + 整改建議 + 依據索引),不是「脫敏執行器」。需要直接遮罩/替換資料的場景請使用脫敏工具類技能;本技能負責在事前判定「該不該發、哪裡違規、依據哪條法規」。 商業化定位(v1.2.0):面向「AI 技能/應用發佈前合規自查」場景,支援扣子等對話式平台使用(使用者上傳附件/貼上文字即可掃描,無需本地目錄),可作為付費技能上架。
觸發詞
- 脫敏審查 / 隱私審查 / 隱私合規檢查 / 合規審查 / 隱私保護稽核 / privacy audit / desensitization audit
- 敏感資訊掃描 / PII 掃描 / PII scan / 敏感欄位檢測 / 個人資訊掃描 / 資料洩漏排查
- 掃描這個目錄有沒有個人資訊 / 掃描這個技能有沒有個人資訊
- 身分證號掃描 / 檢查程式碼裡有沒有手機號 / 程式碼裡有沒有身分證號 / 銀行卡號洩漏檢查
- 倉庫裡有沒有硬編碼金鑰 / 日誌裡有沒有明文密碼 / 上傳檔案有沒有敏感資訊
- 這個技能有沒有洩漏隱私 / 這個技能能不能發佈 / 分享前要不要脫敏 / 資料集脫敏核查
- 脫敏整改建議 / 出一份合規審查報告 / 發佈前安全檢查 / 上架前合規審查
環境準備
# 依賴:Python 3.8+,純標準庫,無第三方依賴
export SKILL_DIR=~/.workbuddy/skills/privacy-audit # 技能安裝路徑
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"
# v1.1.0 批次目錄掃描(多個目錄合併審計)+ 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 號 / 統一社會信用代碼(v1.1.0 新增)
- 檢測 5 類硬編碼憑證:SkillHub key / GitHub token / OpenAI key / 騰訊雲 SecretId / COS 臨時憑證
- 退出碼(可接入 CI 閘門):
0=通過;1=高危命中(禁止發佈);2=中敏感命中(需人工確認) --json:結構化報告(含 scanned_roots/summary/verdict/findings,CI 可消費);--html:自包含可視化報告(總覽卡片 + 分級分佈圖 + 按檔案分組命中清單,離線可看)--strict:一般級別命中也判失敗;--quiet:僅輸出結果行
對話式掃描(v1.2.0 新增,適配扣子等對話場景,無需本機目錄):
# 單檔案掃描(使用者上傳的附件,如 .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 項清單逐項勾選(A 前置識別 5 項 / B 儲存 6 項 / C 展示 6 項 / D 日誌 4 項 / E 共享 5 項 / F 測試 2 項 / G 技術保障 6 項)
- 違規場景排查:15 項高頻違規場景逐項排查(明文儲存、介面未遮罩、超範圍收集、自動勾選同意、強制人臉、日誌明文、洩漏未通知、開盒買賣、跨境未評估等)
- 合規依據核驗:法規名稱/文號/日期與國家標準編號以規範第六部分為準,不得改動
第三步:整改與驗證
- 高風險(P0)必須修復:移除硬編碼憑證 → 環境變數/金鑰管理;明文敏感資料 → 加密儲存 + 遮罩展示
- 修復後重跑 L1 掃描,確認退出碼降為 0(或僅剩低風險)
- 中風險(P1)建議下輪迭代修復;低風險(P2)記錄後續最佳化
第四步:輸出標準報告
以 references/審查報告模板.md 為結構產生報告:審查對象與資料畫像 → 結果總覽 → 分級問題清單(P0/P1/P2)→ 合規項核驗 → 整改優先順序 → 檢查清單對照表 → 結論與免責宣告。
依賴清單
- Python 3.8+(標準庫:argparse / json / os / re / sys)
- 無第三方依賴;可選
--json輸出結構化報告供 CI 消費
邊界與安全(紅線)
- 不構成法律意見:報告結論必須結合具體業務場景,高敏感場景建議人工複核 + 諮詢合規律師
- 報告輸出到掃描目錄之外:避免審計報告被二次掃描命中,也避免報告落進待發佈產物
- 全程本地:不呼叫任何雲端 API,不傳輸待審內容
- 二進位跳過:.zip/.png/.pdf/.docx/.xlsx/.pyc 等不掃描內容(如需掃描先解壓縮/轉文字)
- 禁止刪除:本技能只報告,不刪除、不修改任何被審檔案
踩坑內嵌(經驗教訓,勿重蹈)
| 坑 | 根因 | 方案(已內建於腳本) |
|---|---|---|
| 座標常數/隨機長數字串被誤報為身分證/銀行卡 | 純正則只匹配「形狀」不校驗「合法性」 | 身分證 MOD 11-2 校驗碼驗證、銀行卡 Luhn 校驗,校驗不過即誤報跳過 |
| 身分證內部數字被手機號/銀行卡正則二次命中 | 正則優先級衝突 | 區間去重:命中區間完全落在更高優先級命中內 → 跳過(如 110101 開頭 6 位不會誤報手機號) |
| 長數字串(如 0.00669342162296594323 座標常數)子字串命中手機號 | 手機號正則無邊界 | 手機號正則加前後數字邊界 (?<![0-9])…(?![0-9]) |
| 審計報告寫進掃描目錄被二次命中 | 報告本身含「命中範例」 | 報告輸出到掃描目錄之外(--json 指向外部目錄) |
| Windows 下中文檔案編碼亂碼 | 檔案可能是 GBK 而非 UTF-8 | read_text 先試 UTF-8,失敗按可列印字元比例兜底解碼 |
| node_modules/.git 等大目錄拖慢掃描 | 無過濾全掃 | 內建 SKIP_DIRS(.git/pycache/node_modules/.venv/dist/build 等) |
| 正則庫 JSON 新增欄位後腳本行為不一致 | 正則庫與腳本分離導致失同步 | 正則庫 JSON 是唯一事實源,腳本動態載入;新增欄位類型先改 JSON 再跑腳本 |
| 正則庫 JSON 中的 pattern 定義文字被自身命中(如「人民醫院」字樣出現在醫院名正則裡) | 規則定義本身就是敏感詞樣本 | 屬正常現象,自審出現該命中時人工確認為 pattern 定義後忽略即可(保守方向,寧可 REVIEW 不漏報) |
| 「北京市A12345」地名+數字被誤報車牌號 | 車牌正則無邊界,子字串「京A12345」命中 | 車牌正則加前後漢字/字母數字邊界 (?<!…)(?<![一-龥])…(?![…]),結構校驗器(省+字母+長度7/8)雙保險 |
| 隨機 18 位數字串有約 1/31 機率通過統一社會信用代碼 GB 32100 校驗 | 模 31 校驗對隨機串天然放行機率 | USCC 定位「中敏感」(REVIEW 需人工確認)而非高敏感,正是為此留的兜底;負控制測試用真實非法末位 |
| 測試樣本標籤自命中(如「偽微信號: xxx」被微信號正則命中) | 標籤本身含觸發前綴+合法格式 | 屬正確行為(真實場景「微信號: xxx」就該命中);測試樣本設計時避免在標籤中重現觸發前綴 |
evals/ 用例含虛構敏感樣本導致 preflight --strict 報 phone/email 告警 | 測試用例必須有真實形態的樣本才能測出檢測能力,而發佈門禁的敏感掃描不區分真假 | 發佈自檢時用 --waive phone --waive email --reason "evals 用例含虛構測試樣本,非真實個人資訊" 豁免並落盤留痕;.preflight-waiver.json 發佈前刪除;樣本檔案首行統一標註「虛構測試資料」 |
| 隨機 18 位數字串(如時間戳+序號)約 1/11 機率通過身分證 MOD 11-2 校驗被誤報 | 校驗碼只保證合法性不保證真實性,隨機串天然有放行機率 | 屬已知侷限:人工確認為序號/時間戳/流水號後忽略;不要為此放寬正則(寧可 REVIEW 不漏報) |
使用範例(對話模擬)
使用者:幫我審查一下 ~/projects/skill-demo 這個目錄,能不能發佈?
Agent:
1. 運行 L1 掃描:
python3 ~/.workbuddy/skills/privacy-audit/scripts/privacy_audit.py ~/projects/skill-demo \
--rules ~/.workbuddy/skills/privacy-audit/scripts/欄位檢測正則庫.json --json ~/reports/demo_audit.json
2. 退出碼 1 → 命中 2 處高危(GitHub token 硬編碼 + 身分證明文)→ 判定禁止發佈
3. 對照《審查規範》做 L2 六維度核對:儲存未加密、展示未遮罩、日誌含明文…
4. 輸出分級問題清單(H-1 硬編碼 token / H-2 身分證明文儲存 / M-1 日誌明文…)
5. 整改建議 + 標準報告 → 使用者修復後重跑 L1 → 退出碼 0 → 允許發佈
參考文件
references/個人資料脫敏審查規範.md:完整六維度規範(L1/L2 分層、33 項清單、15 項違規場景、18 部法規 + 6 項國標索引、附錄工具說明)——審查執行的唯一事實依據references/個人資料脫敏審查要點.md:六維度要點(法規背景與判斷維度詳解;來源檔位 官方 = 法律法規與國標,社群共識 = 公開執法/司法典型案例與行業實務)references/審查報告模板.md:L2 標準報告結構模板references/Changelog.md:版本史唯一事實源(1.0.0 → 當前版本的完整變更記錄與版本口徑說明)evals/:迴歸評測集(10 條可執行用例 +trigger_eval.json觸發詞意圖集),改動本技能後跑一次驗證沒把既有能力改壞,跑法見evals/README.md
版本與事實源
- 當前版本號以 SKILL.md frontmatter 的
version為準;發佈 tag、README 版本摘要、references/Changelog.md的當前版本條目全部與之對齊。 - 歷史變更以
references/Changelog.md為唯一事實源。SKILL.md 與 README 裡的 Changelog 都只是最近兩版的摘要 + 指向該檔案的連結,不要在各處各記一套完整版本史——三處全量並列必然漂移。 - 正文裡的
v1.1.0 新增/v1.2.0 新增是功能歸屬標註:標註該功能首次出現在哪個版本,屬歷史記錄,不隨當前版本號改動(當前版本已是 1.3.0,標註仍保留原樣)。 scripts/欄位檢測正則庫.json裡的"version": "1.1.0"是規則庫版本:獨立於技能版本,只在欄位類型/正則/校驗器實際變更時才遞增。1.2.0 只改了掃描入口(--file/--text/--stdin)未改規則,故規則庫仍為 1.1.0 —— 這是正確狀態,不是筆誤,不要「順手對齊」。
Changelog
完整版本史見
references/Changelog.md(唯一事實源),下表為最近兩版摘要。
| 日期 | 版本 | 變更類型 | 變更內容 | 來源 |
|---|---|---|---|
| 2026-09-06 | 1.3.1 | 最佳化 | 新增站內標籤(隱私保護/脫敏/PII/個人資訊保護等 6 項),功能無變化 | SkillHub 端最佳化 |
| 2026-08-29 | 1.3.0 | 最佳化 | 觸發詞覆蓋率 58% → 100%(新增 evals/trigger_eval.json 意圖集 16 條 + 觸發詞簇擴至 30 條);description 由 444 字元收斂至 238 字元,細節下沉正文;新增 evals/ 可執行評測用例集 10 條(--run --aggregate 均分 1.00);新增 references/Changelog.md;確立版本與版本史兩處事實源口徑 | 體檢報告整改 |
| 2026-08-19 | 1.2.0 | 新增 | 腳本新增 --text/--stdin/--file 單檔案/文字掃描入口(適配扣子對話式輸入,無需本地目錄);定位收斂為「發佈前合規閘門」;新增商業化定位說明 | 扣子上架改造 |
(1.1.0 及更早條目見 references/Changelog.md)
免責宣告
本技能由 AI 輔助生成,僅供參考,不構成正式法律意見,不能替代具有執業資格的律師。具體合規判斷應結合業務場景諮詢專業法律人員,並以最新生效法律法規為準。