Очистка ввода PDF пользователя в Python - PullRequest
0 голосов
/ 07 февраля 2019

Мое приложение позволяет пользователям загружать PDF-файлы.Файлы должны выглядеть относительно одинаково и быть вариантами того же формата.Я понимаю, что PDF-файлы могут иногда содержать вредоносный контент - например, Javascript, который будет выполняться при открытии в Adobe Reader или аналогичном.

Я видел несколько пакетов в Интернете, например PDFiD, которые помогают вам взглянуть напотенциально сомнительные PDF-файлы.Похоже, этот позволяет вам увидеть все основные типы контента.Мой текущий мыслительный процесс состоит в том, чтобы получить представление о том, какие типы содержимого должны содержать мои документы, а затем заблокировать загрузку файлов, если они имеют необычное содержимое.

Существует ли простой способ использования Python для автоматической очистки PDF-файлавредоносного контента, удалив весь исполняемый код, который он может содержать?Я знаю, что есть формат PDF / A, который допускает что-то подобное, но есть ли такой пакет, как PyPDF2, который имеет функцию очистки?

1 Ответ

0 голосов
/ 08 февраля 2019

Я считаю, что это будет ответом:

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, если это подозрительно

...