基于 QuickLeaks 的自动敏感信息遮盖
在分享终端操作记录时,API 密钥、密码或个人敏感信息意外暴露在屏幕上的风险始终存在。 为了杜绝信息泄露,console2svg 内置了名为 QuickLeaks 的专用机密检测引擎。 它在即将输出 SVG 前对文本执行机密检测,将命中区域逆向映射到终端单元格坐标,并从 SVG 源码本身中彻底抹除敏感文本。
规则集的预编译与定位
Section titled “规则集的预编译与定位”QuickLeaks 是整合了机密扫描工具 Betterleaks 的规则定义与 console2svg 特有规则后预生成的 C# 源代码。 超过 400 种检测规则已被预先编译为 .NET 原生代码,运行时无需启动任何外部进程或读取外部规则文件。
不过,QuickLeaks 的定位明确聚焦于“快速识别疑似敏感信息的模式匹配”。 它刻意排除了向外部云服务发包验证令牌有效性的在线校验,以及遍历整个 Git 仓库历史等重型分析功能。 这样能确保遮盖处理在数毫秒内完成,绝不阻塞终端录制与渲染流程。
基于锚点检索与专用验证器的高速化
Section titled “基于锚点检索与专用验证器的高速化”若针对每一帧屏幕都从头遍历评估数百条正则表达式,在生成动画 SVG 或视频时会引发严重的性能瓶颈。 为此,QuickLeaks 对正则表达式进行了保守的静态分析,提取出匹配时必然包含的固定字符串(锚点)。
运行时,系统利用 .NET 高性能的字符串检索特性 SearchValues<string>,对整屏文本一次性并行搜索全部锚点。
仅在命中锚点的位置,才激活对应规则的候选标志位进行范围收敛。
更进一步,针对具有固定前缀特征的令牌(如 GitHub 个人访问令牌 ghp_...)或环境变量赋值的标准结构,系统会调用 专用验证器 直接校验字符编码与长度,完全跳过正则表达式引擎。
对于仍需使用正则表达式的规则,系统通过支持 AOT(预编译)的 GeneratedRegex 以及不进行回溯的 RegexOptions.NonBacktracking 执行,并设置严格的超时限制,彻底避免因畸形输入导致处理停滞。
保留结构仅遮盖敏感值的范围控制
Section titled “保留结构仅遮盖敏感值的范围控制”检测引擎命中规则后,并不会盲目地将整个匹配范围全盘抹黑。 为了让读者仍能理解输出上下文,系统采用了有意识保留部分标识符结构的设计。
例如,对于 API_KEY=abcdef123456 的输出,键名 API_KEY= 会被完整保留,仅将值 abcdef123456 列为遮盖对象。
在包含凭据的 URI 中,协议头(https://)和主机名予以保留,仅单独遮盖用户名与密码部分。
即便在主目录路径中,基础目录结构依然可见,仅收敛遮盖属于个人用户名的路径片段。
基于二阶段映射恢复终端网格坐标
Section titled “基于二阶段映射恢复终端网格坐标”虽然机密检测器处理的是扁平的纯文本,但 SVG 渲染引擎需要的是“第几行第几列到第几列”的终端单元格二维坐标。 为了高效完成这一转换,系统采用了 二阶段映射 机制。
第一阶段,系统从可见区域剥离行末无意义的空白,将自动换行的软换行连接为单一规范化字符串,提交给 QuickLeaks 处理。 若该阶段未发现任何机密,则彻底跳过为全文字符生成坐标对照表的高开销操作。
仅在检测到机密信息时,第二阶段才会重新扫描该规范化字符串,构建记录每个字符对应屏幕实际 (行, 列) 的坐标映射表。
绝大多数屏幕都不包含机密信息,这种设计避免了为无机密的普通画面盲目在内存中分配坐标对象。
从 SVG 源码中物理清除敏感字符串
Section titled “从 SVG 源码中物理清除敏感字符串”被列入遮盖范围的单元格,绝不会仅仅采用在原字符上方叠加一层不透明图形的做法。 因为 SVG 属于可检查的文本矢量图形,单纯在视觉上遮挡,用户依然可以通过浏览器“选中文本”或直接查看文档源代码轻易提取出原始密码。
console2svg 会将对应单元格的字符数据本身物理重写为 * 等替换字符,随后在其前方绘制具有视觉警示效果的条纹带(掩码覆层)。
该替换操作会严格保持单元格字符宽度和列位置不变,后续文本排版绝不会发生任何位移。
防止遮盖与动画优化的冲突
Section titled “防止遮盖与动画优化的冲突”在动画 SVG 中,存在引用前一帧行定义并仅绘制局部修改的“行差分”优化。
然而,在指定了手动掩码模式(--mask)时,该行差分机制会被主动禁用。
这是为了防止待遮盖的机密字符串恰好横跨“差分未覆盖的前半段”与“作为差分重绘的后半段”分界线时,因行拆分而导致模式匹配失效。 确保机密信息万无一失的安全性,绝对优先于渲染体积的压缩。