SVG 的元数据确认
SVG 是图片文件,但内部是文本。
不同于看起来像图片的 PNG 或 JPEG,SVG 文件中可能以 XML 形式原样残留图形、文字、注释、图层名、工具信息、ID、说明文等。
即使外观看起来没有问题,用文本方式打开文件时,也可能残留作者名、公司名、项目名、原始文字、编辑工具信息。
如果匿名公开图片或图表,SVG 必须被当作“会公开的文本文件”来确认,而不只是图片。
本文整理 SVG 中会残留哪些信息,以及公开前应该确认什么。
SVG 是能读取内部的图片
SVG 是 Scalable Vector Graphics 的缩写,是用 XML 表示矢量图像的格式。
圆、线、文字、路径、颜色、位置等会写成标签和属性。因此,它既能在浏览器中作为图片显示,也能用文本编辑器读取内部。
| SVG 内的元素 | 可能残留的信息 | 匿名性中的注意点 |
|---|---|---|
| text 元素 | 图片内文字 | 非显示文字也可能残留 |
| metadata 元素 | 作者、工具、说明 | 制作环境可见 |
| 注释 | 工作笔记、姓名 | 不显示在外观中,容易漏掉 |
| id 和 class | 图层名、部件名 | 项目名和内部用语残留 |
| 文件名 | 姓名、案件名、日期 | 共享时原样可见 |
SVG 的危险在于外观和内部不一致。
屏幕上以为已经删除的文字,可能残留在 XML 中。
设计工具的信息会残留
SVG 常常从设计工具或绘图工具中导出。
这时,可能残留创建工具名、导出设置、图层名、对象名、模板名。
| 残留信息 | 例子 | 注意点 |
|---|---|---|
| 创建工具 | Illustrator、Figma、Inkscape 等 | 制作环境被推测 |
| 图层名 | client-logo、school-map | 案件名或组织名出现 |
| 对象 ID | user-name、draft-title | 看出原本用途 |
| 注释 | TODO、工作笔记 | 内部信息残留 |
| 模板名 | 带公司名的模板 | 连接所属 |
只有工具名时,有时问题不大。
但是,如果残留公司名、学校名、案件名、内部项目名、用户名,就会直接关系匿名性。
注意非显示文字
SVG 中可能残留不可见或过小的文字。
例如,如果只是把原图中的姓名移到画面外、设为透明、隐藏图层,XML 内可能仍然残留文字。
| 状态 | 外观 | 内部 |
|---|---|---|
| 透明文字 | 看不见 | 作为 text 元素残留 |
| 画面外文字 | 不显示 | 带坐标残留 |
| 隐藏图层 | 看不见 | 图层信息可能残留 |
| 小文字 | 不易注意 | 放大或确认 XML 时可读 |
即使作为图片看起来没有问题,也要作为文本确认内部。
需要匿名性的 SVG,不能只看外观就发布。
确认什么
公开 SVG 前,确认以下信息。
| 确认项目 | 查看理由 |
|---|---|
| 作者名 | 可能残留个人姓名或账号名 |
| 公司名和学校名 | 看见所属或案件 |
| 图层名和 ID | 可能残留内部项目名 |
| 注释 | 残留工作笔记或删除前信息 |
| 非显示文本 | 残留不显示在外观中的文字 |
| 文件名 | 共享时原样可见 |
确认方法很简单。
用文本编辑器打开 SVG 文件,搜索姓名、邮箱、公司名、学校名、案件名、地名、注释、不需要的字符串。
SVG 优化工具的处理
SVG 有用于删除不必要元数据和属性的优化工具。
SVGO 是用于优化 SVG 文件的代表性工具。官方仓库可以确认会删除什么、有哪些插件。
URL : https://github.com/svg/svgo
使用 SVGO 时,以作为官方本地工具处理为前提来考虑。如果把高风险 SVG 上传到 Web 上的 SVG 优化服务,XML 内的字符串和文件名可能会交给外部。
不过,通过工具并不意味着一定安全。
残留信息会因设置而变。工具主要删除不必要属性和元数据,不会判断图片中本来画出的文字、背景和含义。
即使使用 SVGO,最终也要由人确认内部。
转成 PNG 就安全吗
把 SVG 转换成 PNG 等栅格图片后,作为 XML 的文本信息基本不会显露。
不过,这不等于完全安全。
作为图片显示的文字、背景、标志、地图、画面信息会残留。此外,转换后的图片文件也可能附带其他元数据。
| 转换后减少的东西 | 残留的东西 | 注意点 |
|---|---|---|
| XML 注释 | 图片中可见的文字 | 需要确认外观 |
| 图层名 | 标志和背景 | 看得见所属或地点 |
| 对象 ID | 转换后图片元数据 | 也确认输出文件 |
转换是有效手段之一。
但是,转换后也要确认外观和文件信息。
共享前的实践步骤
发布 SVG 前,要固定步骤确认。
先复制原文件,制作公开用的另一个文件。接着用文本编辑器打开内部,搜索姓名和组织名。之后在浏览器中显示,确认外观中残留的文字和标志。最后查看公开用文件名是否含有个人信息。
| 顺序 | 作业 | 目的 |
|---|---|---|
| 1 | 复制原文件 | 分开编辑前资料和公开用文件 |
| 2 | 作为文本打开 | 确认 XML 内信息 |
| 3 | 搜索姓名和组织名 | 寻找直接线索 |
| 4 | 用浏览器显示 | 确认可见泄露 |
| 5 | 修改文件名 | 删除外侧信息 |
每次都按同样步骤执行,可以减少确认遗漏。
越是匆忙,越不能只靠外观判断。
高风险 SVG 要重新考虑公开格式
在内部举报、采访资料、与职场或学校有关的图、需要保护相关人员的图中,要考虑是否有必要原样公开 SVG。
SVG 很方便,但因为包含可编辑结构,容易残留信息。如果读者不需要放大或编辑,可以选择转成 PNG 后作为图片确认。
不过,PNG 化后背景和显示文字仍然会残留。
改变格式不是为了减少确认,而是为了改变要确认的信息类型。
总结
SVG 会作为图片显示,但内部是文本。
作者名、公司名、学校名、图层名、ID、注释、非显示文本、工作笔记都可能残留。
匿名公开 SVG 时,不只要作为图片查看,也要用文本编辑器确认内部。
SVGO 这样的优化工具有帮助,但请不要完全交给工具。
最终重要的是把正文、图片外观、XML 内部、文件名合在一起确认。
相关工具
ExifTool
与本文相关的外部资源。只有在符合你的处境和威胁模型时再打开。
列在这里的原因: 它可能有助于理解本文主题,但位于 Anonymity Sense 之外,使用前应先自行确认。
URL : https://exiftool.org/
MAT2
与本文相关的外部资源。只有在符合你的处境和威胁模型时再打开。
列在这里的原因: 它可能有助于理解本文主题,但位于 Anonymity Sense 之外,使用前应先自行确认。