Перейти к содержимому
PulsarKit

Как правильно скрыть данные в PDF (черный прямоугольник их не удаляет)

Черный прямоугольник поверх абзаца в PDF не удаляет текст под ним. Такая ошибка уже не раз приводила к утечке реальных документов.

Автор: PulsarKit ·

Почему закрыть текст — не значит удалить его

Если нарисовать черный прямоугольник поверх абзаца в PDF-редакторе, меняется только одно: то, что видно на экране. Если потом прогнать файл через «Свести PDF», это тоже не поможет: прямоугольник впечатается в страницу, но текстовые объекты под ним останутся нетронутыми. Сами слова остаются на своих местах в потоках содержимого страницы. Любой, кто откроет файл, выделит эту область и скопирует ее, получит якобы скрытый текст в буфер обмена за секунду. Без специальных инструментов, в обычной программе для чтения, которая у всех установлена. Это не теоретический риск, а повторяющаяся на практике ошибка. Судебные документы, полицейские отчеты и госконтракты уже не раз утекали именно так, потому что кто-то решил, что черный блок означает исчезновение информации.

Единственный способ удалить текст

Настоящее скрытие данных в PDF значит, что страница с чувствительными данными пересобирается как растровое изображение — картинка. Закрашивающие прямоугольники попадают прямо в эти пиксели до создания изображения, а не рисуются поверх готовой страницы. Новая страница содержит картинку вместо исходных текстовых объектов, поэтому в файле не остается текста, который можно выделить, скопировать или извлечь. Слова не спрятаны под прямоугольником, их в файле больше нет. Правильно реализованный инструмент скрытия данных, а «Скрыть текст в PDF» устроен именно так, заново перечитывает собственный результат и отказывается выдавать файл, если на странице, которая должна быть очищена, все еще обнаруживается текст. Он проверяет свою работу, а не полагается на то, что все наверняка сработало.

Должны меняться только те страницы, к которым вы прикасались

Растрировать весь документ ради двух строк на одной странице — значит раздуть файл в несколько раз и убить поиск по тексту на всех страницах, где нечего скрывать. Страницы без пометок должны остаться ровно такими, как были, побайтно скопированными: текст там по-прежнему выделяется и ищется, а размер остается небольшим. Об одном компромиссе лучше знать заранее, а не удивляться потом: вычищенные страницы станут заметно тяжелее остальных. Снимок страницы с текстом занимает несколько сотен килобайт, тогда как сам текст был всего лишь несколькими килобайтами инструкций. Этот вес — цена за то, что слова исчезли.

Имя, скрытое на странице, может остаться в свойствах документа

Закрасить видимый текст — только половина задачи. Заголовок, автор, тема, ключевые слова и название программы, создавшей файл, живут в метаданных документа, отдельно от всего, что нарисовано на странице. Имя, закрашенное на четвертой странице, ничего не стоит, если то же имя встречает человека в свойствах файла. Метаданные нужно очищать в том же проходе, что и видимый текст, или сразу после него в «Удалить метаданные PDF», а не оставлять на потом и не перекладывать этот сюрприз на получателя документа.

Найти все вхождения, а не только те, что бросились в глаза

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

Почему отсканированной странице нужен совсем другой подход

Поиск работает только по выделяемому тексту, а в отсканированном документе его нет. Это картинка страницы, и введенное в поиск имя не найдет на ней ничего, сколько бы раз оно ни встречалось на изображении. В таком случае нужные области приходится выделять вручную. Результат при этом будет тем же, потому что страница все равно растрируется, независимо от того, был на исходнике выделяемый текст или нет.

Инструменты из этой статьи

Читать дальше