跳到主要内容
PulsarKit

分享文件前先删除元数据:PDF和照片

你能看到的页面,很少是文件携带的全部内容。PDF和照片里藏着什么,删除它们能做到什么、做不到什么,这里讲清楚。

作者:PulsarKit · ·

文件记住的,比页面上的多

打开一个PDF的文档属性,通常能看到作者姓名、工作标题、生成它的软件和两个时间戳,而这些在打印出来的页面上都看不到。照片也有同样的问题。EXIF信息记录相机型号、精确的拍摄时间,而且常常还有精确到几米的GPS坐标,这些都是手机在拍照那一刻自动写进去的,你看不见。

这两样都不是漏洞。两种格式设计时就有正当理由携带这些信息:摄影师按相机和时间整理一次拍摄的照片,公司追踪合同的作者是谁。问题在于,即使你从没打算公开这些信息,它们默认也会跟着文件一起走;而陌生人只需几秒钟就能把它们全部读出来,用的工具并不比删除它们的工具更难用。

照片的位置信息会暴露什么

在家里、车里或孩子学校拍的手机照片,带着精确到足以认出那栋楼的坐标。有些平台会在你上传照片时自动去掉这些数据,但这只保护了它们托管的那份副本。你通过聊天软件发送、作为邮件附件或通过云盘链接分享的原文件,往往原封不动,坐标也都还在。在文件离开你的设备之前,用去除照片EXIF信息删除位置信息,是无论照片之后去了哪里都有效的那一步。

PDF把历史藏在三个不同的地方

清空可见的作者和标题字段是简单的部分,但这不是全部工作。基本文档属性旁边还有一个XMP数据包,它是一个XML块,常常重复同样的字段,还会加上编辑历史、软件版本,有时还有版权声明。它可以分别附在整份文档上、单个页面上和单张嵌入图片上。残留的作者姓名,最常留在这些额外副本中的某一份里,而不是你已经清空的那个字段。完整的清理,也就是PDF删除元数据做的事,还会替换文档标识符,因为标识符为空会破坏PDF的结构;时间戳会重置为一个中性日期,而不是直接删掉,因为有些阅读器要求这个字段必须存在。

为什么重新保存不等于清理

在编辑器里打开照片再导出一次,感觉应该能清掉元数据,有时也确实能。但这个过程中整张图片要解码再重新压缩,为了一件专用工具不动任何像素就能做到的事,付出了实实在在的画质代价。JPEG、PNG或WebP文件里的元数据存放在单独的数据段里,和压缩后的图像数据分开。删除元数据,就是把这些数据段剪掉,其余字节留在原处,所以图片回来时逐位完全相同,而不只是看起来差不多。很多编辑器在重新保存时还会无意中把XMP块原样带过去,这样做就失去了意义。

检查是否真的清理干净了

无法验证的清理只是承诺,不是结果。清理过的PDF和清理过的照片,都可以用别人会用的同一种方法来检查。用任何阅读器或EXIF工具打开结果(EXIF查看器可以查看照片还带着什么,不会修改它),直接查看文档属性或元数据面板。作者、标题、相机型号和坐标应该都已经不见了。值得信任的清理工具会在交回结果之前重新读取自己的输出,如果有任何内容残留就报告问题,而不是让你凭信任接受结果。

让数据留在原处的常见错误

清理之后的泄露,大多来自习惯,而不是工具。最常见的是清理了副本,分享的却是原文件:清理过的文件躺在下载文件夹里,邮件里附的还是手机保存的那个版本,坐标也都还在。要分享你刚下载的那个文件。另一个常见的陷阱是直接来自iPhone的HEIC:它的元数据织在封装格式里,而不是存放在单独的数据段中,所以要先用HEIC转JPG转成JPEG,删除才能做到无损、可验证。

对PDF来说,错误在于指望元数据清理去做涂黑的工作。清空作者字段,碰不到正文里打出来的名字、页边的批注、表单字段里的值,也碰不到链接里的文件名:这些是内容本身,而不是关于内容的元数据。出于同样的原因,书签默认会保留。如果敏感的部分就在页面上,就需要PDF涂黑,它会把受影响的页面重建成图片,元数据清理放在它之后。一份即将公开的敏感文档,顺序是:先涂黑,再清理,最后再看一眼属性面板。

本文用到的工具

继续阅读