Метод TCPDF SetProtection не работает должным образом

Я начал писать здесь:

Защита паролем PHP PDF (без пароля)

Но я не могу добавлять комментарии из-за моей репутации здесь (у меня лучше на AskUbuntu, но я не могу брать оттуда свои очки репутации). Я тоже там завел баунти, и если кто-то ответит здесь через два дня с приемлемым решением, я награжу там.

Теперь проблема: метод SetProtection не работает должным образом.

Требуемое поведение: создайте защищенный/зашифрованный PDF-документ с библиотекой TCPDF, чтобы просмотр документа всегда предоставлялся всем без запроса пароля, но при попытке редактирования запрашивается пароль.

Я использую следующий синтаксис:

$pdf-›SetProtection(array('modify', 'copy', 'annot-forms', 'fill-forms', 'extract', 'assemble'), null, 'mypwd', 1);

  1. Я могу открыть файл в программе просмотра PDF, как и ожидалось.
  2. Если я попытаюсь открыть файл с помощью Libreoffice Draw, будет запрошен пароль (как и ожидалось), но я смогу редактировать документ ОБА с mypwd (ожидается) И с пустым паролем (НЕ ожидается).

Каков правильный синтаксис, если он есть, чтобы pdf был доступен для чтения всем, НО редактировался ТОЛЬКО при наличии mypwd?

ИЗМЕНИТЬ:

вот вам файл с пустым паролем пользователя и надежным мастер-паролем. Ilovepdf.com находит его РАЗБЛОКИРОВАННЫМ, Libreoffice Draw может его редактировать. Это НЕ ожидаемое поведение.

https://www.dropbox.com/s/864p8xjh1ue041z/tracking_12750_16.pdf?dl=0


person jasmines    schedule 22.08.2020    source источник
comment
пожалуйста, поделитесь примером pdf, чтобы можно было провести общий анализ. Потому что на первый взгляд это похоже не на проблему tcpdf, а на Libreoffice Draw.   -  person mkl    schedule 22.08.2020
comment
Ilovepdf.com распознает pdf как незащищенный. Я собираюсь поделиться PDF-файлами в ответ   -  person jasmines    schedule 22.08.2020
comment
Я не могу найти ответный вопрос на Ask Ubuntu в вашем профиле — он был удален?   -  person halfer    schedule 27.08.2020
comment
В вопросе Ask Ubuntu нет кросс-постов   -  person jasmines    schedule 27.08.2020
comment
Хороший вопрос. Ваш вопрос - мой ответ. Вы помогаете мне решить мою проблему. Спасибо.   -  person Kalyan Halder Raaz    schedule 21.12.2020


Ответы (1)


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

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

Это уже понятно из спецификации:

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

(ISO 32000-2, раздел 7.6.4 Стандартный обработчик безопасности)

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

Вы должны просто осознавать, что ваше ожидание

создать защищенный/зашифрованный PDF-документ с библиотекой TCPDF, чтобы просмотр документа всегда предоставлялся всем без запроса пароля, но если кто-то пытается редактировать, запрашивается пароль.

не может быть реализован с использованием стандартных средств шифрования PDF для произвольных процессоров PDF, только для тех, которые следуют требованиям спецификации PDF, приведенным выше.

Есть некоторые поставщики программных решений PDF DRM, которые не так просто обойти, но я сомневаюсь, что кто-либо из них сможет противостоять решительному хакеру. (Если рассматриваемое решение вообще не предоставляет пользователю PDF-файл, а только изображения в пользовательской программе просмотра на основе веб-сервиса, но это не ваш вариант использования.)


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

person mkl    schedule 23.08.2020
comment
Я пробовал использовать метод setsignature, pdf можно редактировать. Нет возможности получить то, что мне нужно. - person jasmines; 24.08.2020
comment
Я пытался использовать метод setsignature, PDF-файл доступен для редактирования. Нет способа получить то, что мне нужно. - Конечно, подписание не предотвращает правки, а просто делает их определяемыми. Если этого недостаточно, вам не повезло, ваши требования (по крайней мере, в том виде, в каком вы их сообщаете) не могут быть выполнены. - person mkl; 24.08.2020