在 Python 中清理 PDF 用户输入

Sanitizing PDF user input in Python

我的应用程序允许用户上传 PDF 文件。这些文件应该看起来相对相似并且是相同格式的变体。我了解 PDF 有时可能包含恶意内容——例如Javascript 在 Adob​​e Reader 或类似软件中打开时将执行。

我在网上看到了一些软件包,例如 PDFiD,它可以帮助您查看可能有问题的 PDF。这似乎允许您查看所有底层内容类型。我目前的想法是了解我的文档应该包含哪些内容类型,然后在文件包含异常内容时阻止文件上传。

有没有一种简单的方法可以使用 Python 自动清除 PDF 中的恶意内容,删除其中可能包含的所有可执行代码?我知道有一种 PDF/A 格式允许这样的事情,但是有没有像 PyPDF2 这样具有清理功能的包?

我相信这就是答案:

from pdfid import PDFiD
new_file = PDFiD('path/to/file', disarm=True)

将采用 PDF 的元素

<Keywords>
    <Keyword Count="56" HexcodeCount="0" Name="obj"/>
    <Keyword Count="56" HexcodeCount="0" Name="endobj"/>
    <Keyword Count="32" HexcodeCount="0" Name="stream"/>
    <Keyword Count="32" HexcodeCount="0" Name="endstream"/>
    <Keyword Count="1" HexcodeCount="0" Name="xref"/>
    <Keyword Count="1" HexcodeCount="0" Name="trailer"/>
    <Keyword Count="1" HexcodeCount="0" Name="startxref"/>
    <Keyword Count="8" HexcodeCount="0" Name="/Page"/>
    <Keyword Count="0" HexcodeCount="0" Name="/Encrypt"/>
    <Keyword Count="0" HexcodeCount="0" Name="/ObjStm"/>
    <Keyword Count="0" HexcodeCount="0" Name="/JS"/>
    <Keyword Count="0" HexcodeCount="0" Name="/JavaScript"/>
    <Keyword Count="0" HexcodeCount="0" Name="/AA"/>
    <Keyword Count="0" HexcodeCount="0" Name="/OpenAction"/>
    <Keyword Count="0" HexcodeCount="0" Name="/AcroForm"/>
    <Keyword Count="0" HexcodeCount="0" Name="/JBIG2Decode"/>
    <Keyword Count="0" HexcodeCount="0" Name="/RichMedia"/>
    <Keyword Count="0" HexcodeCount="0" Name="/Launch"/>
    <Keyword Count="0" HexcodeCount="0" Name="/EmbeddedFile"/>
    <Keyword Count="0" HexcodeCount="0" Name="/XFA"/>
    <Keyword Count="0" HexcodeCount="0" Name="/Colors &gt; 2^24"/>
</Keywords>

如果可疑就让一切计数=0