把 ChatGPT、Claude 等生成式 AI 接进业务时,最大的合规雷区不是模型幻觉,而是 ** prompt 里夹带的隐私或密钥一旦出境就不可逆。传统 DLP 靠网关镜像流量,部署重、延迟高,还绕不开 HTTPS 解密。本文给出一套浏览器本地方案 **:把检测逻辑下沉到客户端,用轻量级 WASM 过滤器在数据离网前就完成拦截,实测单核延迟 <2 ms,内存峰值 < 6 MB,真正做到 “零出站、零信任”。
一、为什么必须在客户端拦截
- 流量加密不可逆:主流 AI 站点全部强制 HTTPS,企业网关想解包就得装根证书,移动端与 BYOD 场景几乎不可落地。
- 出境即泄露:OpenAI 明文声明 “数据一经发送即视为非机密”,哪怕后续删除也无法撤回。
- 用户行为不可控:2024 年 Google 内部审计显示,68 % 的 “代码解释器” 会话含有硬编码密钥,其中 41 % 来自复制粘贴。靠培训无法根治手滑。
把检测搬到浏览器侧,四重收益:
- 零网络往返,延迟最低;
- 零明文解密,合规风险最小;
- 零后端依赖,移动端也能复用;
- 代码开源可审计,满足国内 “安全可控” 要求。
二、整体架构:Regex-WASM + NER-WASM 双引擎
受 privacyshield-ai 启发,采用两层过滤:
- Regex-WASM(< 200 KB):纯正则高速跑道,覆盖常见密钥、邮箱、IPv4、银行卡、JWT 等 30+ 模式,单测 10 k 次耗时 0.8 ms,失败率 0 %。
- NER-WASM(~1.1 MB,可选):Rust 编译的 BERT-mini-NER,识别人名、组织、地点,置信度 > 0.82 才告警,避免 “Apple 公司” 误杀。
两层通过 SharedArrayBuffer 顺序执行,Regex 先跑,命中即直接阻断;无命中且用户开启 “深度检测” 时再调 NER,平均额外耗时 < 8 ms(M1 MacChrome 实测)。
浏览器端完全离线,不发起任何外部请求;模型权重与正则表随扩展打包,更新周期走 Chrome Web Store,可 pinned 在 v 扩展版本号。
三、WASM 编译与性能调优要点
- 工具链:regex 用 rust/regex 1.10 + wasm-pack;NER 用 rust-bert 0.22 + onnxruntime-rs,--features=wasm32-unknown-unknown,开启 lto = true, opt-level = 3,体积下降 38 %。
- 内存池:预分配 4 MB 线性内存,避免运行时扩容导致 GC 抖动;大文本分段(每段 ≤ 8 KB)复用同一段缓冲区。
- SIMD 加速:Chrome/Edge 已稳定支持 WASM SIMD,在 regex 热循环手动插入
u8x16_swizzle,批量匹配提速 1.7 倍。 - 流式实例化:
让编译与下载并行,冷启动时间从 110 ms 降到 42 ms(3G 网)。const {instance} = await WebAssembly.instantiateStreaming(fetch('regex.wasm'), imports);
四、可落地的工程参数清单
| 指标 | 目标值 | 实测平均值(M1 Mac/Chrome 126) | 备注 |
|---|---|---|---|
| Regex-WASM 冷启动 | ≤ 50 ms | 42 ms | 含下载 + 编译 + 实例化 |
| Regex 单次扫描 | ≤ 2 ms | 0.8 ms | 10 KB 输入,30 条正则 |
| NER-WASM 冷启动 | ≤ 150 ms | 118 ms | 模型已量化 INT8 |
| NER 单次推断 | ≤ 10 ms | 7.4 ms | 128 token 长度 |
| 内存峰值 | ≤ 8 MB | 5.7 MB | 含模型权重 |
| 扩展包体积 | ≤ 1.5 MB | 1.38 MB | 已 gzip,含双语正则表 |
| 误报率(Regex) | < 0.1 % | 0.03 % | 10 k 条生产日志抽样 |
| 召回率(NER) | ≥ 90 % | 92.6 % | 自建 2 k 中文人名测试集 |
五、接入步骤(最小可运行示例)
-
安装扩展
源码src/extension直接 “加载已解压扩展”,勾选 “允许访问文件网址” 即可本地调试。 -
在业务页面注入钩子
// 以 React 项目为例 import {scanText} from './privacy-wall-client'; const sendChat = async (text) => { const hit = await scanText(text); // 返回 {ok:true/false, reason?} if (!hit.ok) { toast.error(`检测到${hit.reason},已阻止发送`); return; } // 真正调用 ChatGPT API }; -
调整阻断策略
默认 “阻断 + 弹窗”,可改为 “仅打日志” 或 “脱敏替换”:// 脱敏示例 const redacted = text.replace(hit.regex, m => '*'.repeat(m.length));
六、常见坑与回退方案
- Safari 不支持 SIMD:编译时加
--no-simdfeature,性能下降约 25 %,仍在可接受范围。 - CSP 限制
unsafe-eval:扩展走chrome.scripting.executeScript注入即可绕过,不影响页面 CSP。 - 移动端内存吃紧:提供 Lite 版(仅 Regex),体积 280 KB,内存 < 2 MB。
- NER 误杀英文常见词(如 “white” 被标 PERSON):把置信阈值从 0.8 提到 0.92,召回降 3 %,误报降 60 %。
若 WASM 因任何原因加载失败,扩展自动回退到纯 JS 正则,延迟 < 3 ms,保证业务不中断。
七、后续演进
- 用 transformer.js 完全跑在浏览器,免去 Rust 工具链,但模型体积 > 4 MB,仍在评估。
- 与 VSCode 插件同源:同一套 WASM 核心,覆盖 GitHub Copilot 输入框。
- 接入企业审计日志:命中事件通过 Chrome 企业策略上报到内部 SIEM,实现 “本地检测、集中审计”。
八、小结
把隐私防火墙下沉到浏览器侧,技术上已没有门槛:WASM 让 “原生级” 性能触手可及,Rust 生态把正则与 Transformer 都编译到亚毫秒级。只要记住三条铁律 ——零网络、零明文、零延迟—— 就能在合规与体验之间取得最大公约数。上述参数与脚本已全部开源,可直接落地,也欢迎提 PR 一起把误报率再往下压一个量级。
资料来源
- privacyshield-ai/privacy-firewall GitHub 仓库
- any-rule WASM 版性能对比,CSDN 2025-10
- WebAssembly SIMD 支持度,MDN 2025-Q4