数据脱敏工具制作
核心原则
页面 = 模板,一点不改。 工具的交互页面(布局、区块顺序、规则体系、文案)已由用户逐项验收定稿,固化在 assets/mask-tool-src.html。制作 = 拼接 + 验证 + 交付,不是开发。用户的新需求若超出模板能力,先说明边界并与用户确认,不得擅自改模板结构。
触发判定
- 「帮我做一个脱敏工具」及任何同义表述 → 走本流程
- 用户拿来含敏感信息的文件要求脱敏 → 也直接产出本工具交其自行处理(数据不出本机是硬约束)
- 用户允许数据上传外部服务处理 → 本 Skill 不适用
工作流
- 生成:
python3 <skill目录>/scripts/build_tool.py <输出目录>/数据脱敏工具.html——一键拼接 engine/app/xlsx 库进模板,产出约 970KB 单文件。无需联网。 - 验证:过一遍下方自查清单。有 Node 环境则跑引擎快检(手机号/身份证18校验位/银行卡Luhn/按格式规则各 1 样本);有无头浏览器则实测一次真实上传。
- 交付:present_files 交付,附使用说明三句话:双击本地打开(勿依赖在线预览,沙箱可能拦截文件选择器)→ 拖入文件自动脱敏 → 点导出按钮拿结果。
自查清单(交付前必须全过)
- [ ] 产出 >700KB、含内嵌 xlsx 库、全文无
src="http/href="http外链 - [ ] 文件选择框是
class="vh"视觉隐藏,不是hidden属性(hidden 会导致部分环境无法弹出选择器) - [ ] change 事件处理器是
e.target.files[0](历史事故:误写e.dataTransfer.files导致上传后全程无反应且无报错) - [ ] 抽查 1 个校验位合法身份证 → 被打码;1 个校验位不合法 18 位数字 → 保持原样
- [ ] 无头浏览器可用时:真实上传 xlsx → 断言「已加载」出现、结果区非 hidden、导出按钮带「-已脱敏」文件名
资产
| 文件 | 作用 |
|---|---|
assets/mask-tool-src.html |
页面模板(含 ENGINE / XLSX_LIB / APP 三个占位符) |
assets/engine.js |
脱敏引擎(纯逻辑、无 DOM,可独立回归测试) |
assets/app.js |
交互层(上传、自定义规则 CRUD、渲染、导出) |
assets/xlsx.full.min.js |
SheetJS 0.20.3 内嵌库(勿升级、勿改用 CDN) |
scripts/build_tool.py |
一键拼接脚本 |
references/规则体系与避坑.md |
规则账本、执行顺序、已踩过的坑(改动前必读) |