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 阅读器会自动打开文件并将其标记为“(SECURED)”。密码安全还可以对 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 文件。