PDF, который вы собираетесь отправить наружу — партнёру, клиенту, в госорган или на публикацию, — часто содержит больше, чем видно на экране. Внутри могут остаться исполняемые скрипты, скрытые слои, вложенные файлы, история правок и метаданные. Всё это либо создаёт риски безопасности у получателя, либо раскрывает информацию, которую вы не планировали показывать. Перед распространением документ нужно очистить: убрать JavaScript, проверить скрытые элементы и сохранить «плоскую», предсказуемую копию файла.
Главный принцип простой: распространяйте не рабочий файл, а его очищенную экспортную копию. Оригинал с формами, скриптами и историей правок остаётся у вас, а наружу уходит документ, из которого удалено всё, что не относится к видимому содержимому.
- Что именно скрывается в PDF и почему это проблема
- Когда очистка обязательна, а когда достаточно проверки
- Как найти JavaScript и скрытые элементы в PDF
- Проверка в Adobe Acrobat
- Проверка без Acrobat
- Пошаговое удаление JavaScript и скрытых элементов
- Радикальный способ: пересборка и растеризация
- Настоящая редакция против закрашивания
- Типичные ошибки при очистке PDF
- Как проверить, что документ чист
- Что делать дальше
Что именно скрывается в PDF и почему это проблема
Формат PDF — это контейнер. Кроме страниц с текстом и картинками, внутри могут находиться объекты, которые никак не проявляются при обычном просмотре:
- JavaScript-код. Скрипты в PDF запускаются при открытии документа, при определённых действиях пользователя (например, при печати или закрытии) или при взаимодействии с полями форм. Легитимно они используются для автоподсчёта сумм в анкетах и валидации ввода, но тот же механизм эксплуатируется для доставки вредоносной нагрузки. Многие корпоративные и государственные почтовые фильтры помечают PDF со скриптами как подозрительные или блокируют их вовсе.
- Скрытые и необязательные слои (OCG). Слои позволяют хранить в одном файле несколько версий содержимого: например, чертёж с размерами и без. Получатель с подходящим просмотрщиком включит слой и увидит то, что вы считали скрытым.
- Вложения. Внутри PDF могут быть прикреплены исходники, таблицы, архивы — иногда забытые, иногда оставленные намеренно «для удобства».
- Комментарии, пометки и история правок. Заметки рецензентов, удалённый текст под закрашивающими фигурами, данные сравнения версий.
- Метаданные. Имя автора, название организации, путь к файлу на диске, программа и версия, с которой создан документ, даты создания и правок.
- Данные форм. Значения, введённые в интерактивные поля, включая то, что пользователь считал временным черновиком.
Отдельная категория риска — текст под изображением или фигурой. Если поверх конфиденциального абзаца положили белый прямоугольник, текст остался в файле: его выделяют, копируют и извлекают любой утилитой. То же относится к «удалённым» фрагментам, закрытым штампами: без настоящей редакции (redaction) содержимое никуда не делось.
Когда очистка обязательна, а когда достаточно проверки
Глубина подготовки зависит от того, куда и кому уходит документ.
| Сценарий распространения | Что обязательно | Что желательно |
|---|---|---|
| Публикация в открытом доступе | Удаление JavaScript, вложений, метаданных, проверка скрытых слоёв | Растеризация страниц, если документ содержит чувствительные фрагменты |
| Отправка контрагенту или клиенту | Удаление скриптов, вложений, черновых слоёв, проверка комментариев | Очистка метаданных, удаление истории правок |
| Передача в госорган, суд, аудит | Полная очистка плюс проверка, что удаление не нарушило целостность и читаемость | Сохранение оригинала как доказательной копии у себя |
| Внутренний документ между доверенными коллегами | Проверка на случайные вложения и черновики | Очистка метаданных при передаче за пределы организации |
Если документ содержит персональные данные, коммерческую тайну или сведения, раскрытие которых имеет юридические последствия, относитесь к очистке как к обязательному этапу, а не как к опции.
Как найти JavaScript и скрытые элементы в PDF
Прежде чем удалять, стоит понять, что в файле вообще есть. Несколько способов проверки, доступных без специальных знаний.
Проверка в Adobe Acrobat
В Acrobat (платная версия, не бесплатный Reader) откройте панель инструментов и посмотрите:
- Все инструменты → JavaScript → Все скрипты документа — показывает скрипты уровня документа.
- Панель «Вложения» (значок скрепки) — список прикреплённых файлов.
- Панель «Комментарии» — заметки, пометки, выделения.
- Свойства документа (Ctrl+D) — вкладка «Описание» показывает метаданные, вкладка «Безопасность» — ограничения.
- Панель «Слои» — если есть, документ содержит необязательные группы содержимого.
- Предпечатная проверка (Print Production) — в профессиональных версиях есть инспекция документа, в том числе поиск скрытого текста и объектов за пределами видимой области.
Проверка без Acrobat
Если Acrobat недоступен, используйте бесплатные инструменты командной строки — они дают даже более объективную картину, потому что показывают внутреннюю структуру файла, а не то, что решил отобразить просмотрщик.
- qpdf: команда qpdf —qdf —object-streams=disable input.pdf decoded.pdf превращает файл в читаемый вид, после чего в decoded.pdf можно искать строки «/JavaScript», «/JS», «/EmbeddedFile», «/OCG», «/Launch», «/OpenAction» обычным текстовым поиском.
- pdftk: команда pdftk input.pdf data_dump output dump.txt выводит структуру документа, включая метаданные и закладки.
- ExifTool: команда exiftool -a -u -g1 input.pdf показывает все метаданные, включая нестандартные и дублирующиеся теги.
- peepdf (для тех, кто работает с безопасностью): специализированный анализатор, который явно помечает подозрительные объекты — JavaScript, действия при открытии, запуски внешних файлов.
Практический ориентир: если поиск по декодированному файлу находит «/JavaScript» или «/OpenAction», скрипты в документе есть, даже если ни один просмотрщик их не показывает. Наличие «/EmbeddedFile» означает вложения, «/OCProperties» — слои.
Пошаговое удаление JavaScript и скрытых элементов
Ниже — универсальный порядок действий. Он подходит для большинства ситуаций; отдельные шаги можно пропустить, если проверка показала, что соответствующих объектов в файле нет.
- Сделайте резервную копию оригинала. Все операции очистки необратимы в пределах рабочего файла. Оригинал храните отдельно, в месте, из которого он не попадёт в рассылку по ошибке.
- Проведите инспекцию. Проверьте файл одним из способов выше: скрипты, вложения, слои, комментарии, метаданные.
- Удалите скрипты и действия. В Acrobat: «Все инструменты → JavaScript» — удалите все скрипты документа; затем в свойствах документа проверьте, что на вкладке «Начальный вид» не задано действие при открытии. В командной строке надёжнее всего пересобрать файл (см. ниже) — это удаляет скрипты целиком, а не по одному.
- Удалите вложения. В Acrobat откройте панель вложений и удалите все файлы. В pdftk: pdftk input.pdf drop_attachments output clean.pdf (в новых версиях) либо пересборка через qpdf.
- Разберитесь со слоями. Если скрытые слои не нужны — сведите документ: в Acrobat «Печать → Adobe PDF» с включёнными только нужными слоями, либо «Все инструменты → Организация страниц» и экспорт с плоским содержимым. Если слои нужны, но часть скрыта — вручную удалите ненужные объекты, а не полагайтесь на флаг видимости.
- Удалите комментарии и пометки. В Acrobat: «Комментарии → Удалить все комментарии». Убедитесь, что вместе с ними не исчезла нужная разметка.
- Очистите метаданные. В Acrobat: «Свойства документа → Дополнительные метаданные → Удалить свойства и информацию» (в Windows-версии пункт называется «Remove Hidden Information» / «Sanitize Document»). Санитизация одним действием удаляет скрипты, вложения, метаданные и скрытые данные — это самый быстрый путь, если вы работаете в Acrobat.
- Проверьте формы. Если интерактивные поля не нужны получателю, сведите их: «Печать → Adobe PDF» или экспорт в плоский PDF превращает поля в обычную графику. Если поля нужны — очистите введённые значения и удалите скрипты, привязанные к полям.
- Пересохраните и проверьте результат. Повторите инспекцию из шага 2 на очищенном файле. Поиск по «/JavaScript», «/EmbeddedFile», «/OpenAction» через qpdf должен ничего не находить.
- Откройте финальный файл в другом просмотрщике (браузер, мобильный ридер) и убедитесь, что документ выглядит и читается как ожидалось: ничего не пропало, страницы на месте, текст выделяется.
Радикальный способ: пересборка и растеризация
Если документ не содержит форм и интерактивности, самый надёжный метод очистки — пересобрать его через виртуальный принтер. Откройте PDF и «напечатайте» его в новый PDF (Adobe PDF, Microsoft Print to PDF или аналогичный драйвер). В новый файл попадает только видимое содержимое страниц: скрипты, вложения, слои, комментарии и большинство метаданных остаются в старом файле.
Ещё более радикальный вариант — растеризация: каждая страница превращается в изображение. Текст перестаёт выделяться и извлекаться, вместе с ним исчезают любые скрытые текстовые фрагменты. Минусы очевидны: файл тяжелеет, текст нерецензируем и неудобен для чтения с масштабированием, а для документов, которые получатель должен обрабатывать программно, этот способ вообще не подходит. Растеризация оправдана, когда конфиденциальность важнее удобства — например, для сканов договоров, идущих внешним сторонам.
Важное предостережение: пересборка через печать не удаляет текст, скрытый под фигурами, если такой текст виден принтеру как часть содержимого страницы. Перед печатью проверьте документ инструментом поиска: если Ctrl+F находит слово, которого не видно на странице, — сначала удалите этот текст настоящей редакцией.
Настоящая редакция против закрашивания
Это самая частая и самая дорогая ошибка при подготовке документов. Закрашивание текста прямоугольником, маркером в редакторе или белой фигурой — это визуальная маскировка. Текст остаётся в файле полностью: его находит поиск, его извлекает копирование, его читают любые утилиты. Известны громкие случаи, когда «обезличенные» таким способом документы раскрывали имена и секретные данные.
Настоящая редакция (redaction) физически удаляет текст из потока содержимого. В Acrobat это инструмент «Удалить скрытую информацию → Удалить текст и изображения»: вы размечаете фрагменты, применяете редакцию, и только после применения текст исчезает из файла. После редакции обязательно проверьте результат поиском: попробуйте найти удалённое слово через Ctrl+F и скопировать область редакции в текстовый редактор. Ничего не находится — редакция выполнена правильно.
Типичные ошибки при очистке PDF
- Удаление скриптов только уровня документа. Скрипты могут быть привязаны к отдельным полям форм, кнопкам и аннотациям. Проверка «скриптов документа» их не показывает. Если оставляете форму рабочей, проверьте скрипты каждого поля; если форма не нужна — сведите её в графику.
- Очистка не того файла. В переписке легко прицепить оригинал вместо очищенной копии, особенно если имена похожи. Дайте очищенному файлу однозначное имя (например, с суффиксом «_final») и храните оригиналы в отдельной папке.
- Редакция без проверки. Применённая «на глаз» редакция может не покрыть весь фрагмент или не примениться из-за сбоя. Всегда проверяйте поиском и копированием.
- Забытые свойства документа. Даже после удаления метаданных в файле могут остаться имя в истории версий, данные о приложении-редакторе и путь к файлу. Санитизация закрывает это одним действием.
- Слепая вера в просмотрщик. То, что ваш просмотрщик не показывает слои и не запускает скрипты, не значит, что их нет в файле. Получатель может открыть документ в другом приложении. Ориентируйтесь на структуру файла, а не на поведение одной программы.
- Очистка без проверки читаемости. Агрессивная санитизация и пересборка иногда ломают закладки, ссылки, шрифты или порядок страниц. Всегда открывайте финальный файл целиком и листайте его от начала до конца.
Как проверить, что документ чист
Финальная приёмка очищенного PDF — короткий чек-лист, который выполняется за несколько минут:
- Поиск по декодированному файлу (qpdf + текстовый поиск) не находит «/JavaScript», «/JS», «/OpenAction», «/EmbeddedFile», «/Launch».
- ExifTool не показывает имя автора, организации и пути к файлу — либо показывает только то, что вы сознательно решили оставить.
- Поиск по документу (Ctrl+F) не находит текст, которого не видно на странице.
- Копирование области рядом с редактированными фрагментами не выдаёт скрытый текст.
- Панель вложений пуста, панель комментариев пуста, панель слоёв отсутствует или содержит только нужные слои.
- Документ полностью открывается в независимом просмотрщике, все страницы на месте, текст читаем.
- Имя файла и его расположение исключают случайную отправку оригинала.
Что делать дальше
Соберите процесс в короткий регламент и применяйте его к каждому документу перед внешней отправкой: инспекция → очистка (санитизация или пересборка) → редакция конфиденциальных фрагментов → повторная проверка → отправка очищенной копии под однозначным именем. Если рассылка PDF для вас регулярна, автоматизируйте проверку командной строкой (qpdf, ExifTool, pdftk) — это занимает секунды и исключает человеческий фактор.
И последнее: очистка файла не заменяет решения о том, что в нём вообще должно быть. Если документ содержит данные, которые не предназначены получателю, лучший способ их защитить — не полагаться на скрытие, а исключить их из документа на этапе подготовки.
