PDF安全问题

OCRmyPDF 应仅用于您信任的 PDF 文件。它并非设计用于保护您免受恶意软件的侵害。

认识到许多用户对处理PDF文件以及对他们自己未生成的PDF文件应用OCR感兴趣,本文讨论了PDF文件的安全影响以及用户如何保护自己。

免责声明适用:本软件没有任何形式的保证。

PDF文件可能包含恶意软件

PDF是一种丰富且复杂的文件格式。官方的PDF 1.7规范,ISO 32000:2008,长达数百页,并引用了几个长度相似的附录。PDF可以包含视频、音频、XML、JavaScript和其他编程内容,以及表单。在某些情况下,它们可以打开到预选URL的互联网连接。所有这些都可能成为攻击向量。

简而言之,PDF文件可能包含病毒

如果您不信任某个PDF或其来源,请不要打开它或在其上使用OCRmyPDF。考虑使用Docker容器或虚拟机来隔离不受信任的PDF与您的系统。

OCRmyPDF如何处理PDF文件

OCRmyPDF 必须打开并解释您的 PDF 文件以便插入 OCR 层。首先,它会通过 pikepdf 处理所有 PDF 文件,这是一个基于 QPDF 的库,QPDF 是一个修复语法错误的 PDF 文件的程序。这样做是因为,根据作者的经验,许多在野外发现的 PDF 文件,特别是由扫描仪创建的,都不是格式良好的文件。QPDF 增加了 OCRmyPDF 成功的可能性,但不提供任何安全保证。QPDF 也用于将 PDF 文件分割成单页 PDF 文件。

最后,OCRmyPDF 使用 Ghostscript-dSAFER 模式下对 PDF 的每一页进行光栅化处理。

根据指定的选项,OCRmyPDF 可能会将 OCR 层嵌入现有的 PDF 中,或者可能会基本上重建(“重新制作”)一个在视觉上相同但在二进制级别上可能非常不同的 PDF。也就是说,OCRmyPDF 并不是一个用于清理 PDF 的工具。

受密码保护的PDF

受密码保护的PDF通常有两个密码,一个是所有者密码,另一个是用户密码。当用户密码设置为空时,PDF阅读器将自动打开文件并将其标记为“(已保护)”。密码安全还可以对PDF请求某些限制,但如果拥有所有者用户密码,任何人都可以移除这些限制。密码主要是为普通用户设置的一道障碍。

OCRmyPDF 无法从 PDF 中移除密码。如果你想从 PDF 中移除密码,你必须使用其他软件,例如 qpdf

如果设置了所有者密码和用户密码,qpdf 需要密码。如果只设置了所有者密码,即使没有所有者密码,也可以移除密码。要使用 QPDF 移除密码,请使用:

qpdf --decrypt --password='abc123' input.pdf no_password.pdf

然后你可以在文件上运行OCRmyPDF。

在默认模式下,OCRmyPDF 生成 PDF/A。PDF/A 文档不能设置密码。如果你想在输出的 PDF 上设置密码,你必须指定 --output-type pdf

签名图像

许多程序能够插入某人的签名图像。仅凭这一点,它并不能提供任何安全保证。移除签名图像并将其应用到其他文件上是轻而易举的。这种做法并不能提供真正的安全性。

数字签名

重要文件可以通过数字签名和认证来证明其作者身份、批准或执行法律协议。OCRmyPDF 将检测已签名的 PDF 文件,并且不会修改它们,除非使用了 --invalidate-digital-signatures 选项,这将使任何签名失效。(如果打开 PDF 文件,签名可能仍然存在,但 PDF 阅读器将不会验证它。)

数字签名将文档的加密哈希添加到文档中,从而提供了防篡改保护。这也阻止了OCRmyPDF修改文档并保留签名。

数字签名与签名图像不同。数字签名是文档的加密哈希值,使用作者的私钥进行加密。签名通过作者的公钥进行解密。公钥通常由证书颁发机构分发。签名随后由PDF阅读器验证。如果文档被修改,签名将失效。

证书加密的PDF文件

PDF文件可以使用证书进行加密。这是一种比密码更安全的加密形式。证书通常由证书颁发机构颁发。证书用于使用公钥加密文档,以便拥有私钥的特定接收者可以解密。

OCRmyPDF 无法打开证书加密的 PDF 文件。如果您拥有证书,可以使用其他 PDF 软件(如 Acrobat)来解密 PDF。