TCPDFSetProtectionメソッドが期待どおりに機能していません
私はここに書き始めました:
PHP PDFパスワード保護(パスワードなしでは開かない)
しかし、ここでの評判のためにコメントを追加することはできません(AskUbuntuの方が優れていますが、そこから担当者ポイントを取得することはできません)。私もそこで賞金を始めました、そして誰かが2日以内に許容できる解決策でここに答えるならば、私はそこで授与します。
現在、問題:SetProtectionメソッドが期待どおりに機能していません。
望ましい動作:TCPDFライブラリを使用して保護/暗号化されたPDFドキュメントを作成し、パスワードを要求せずにドキュメントビューが常にすべてのユーザーに付与されるようにしますが、編集しようとするとパスワードが要求されます。
次の構文を使用します。
$ pdf-> SetProtection(array( 'modify'、 'copy'、 'annot-forms'、 'fill-forms'、 'extract'、 'assemble')、null、 'mypwd'、1);
- 期待通り、PDFビューアでファイルを開くことができます。
- Libreoffice Drawでファイルを開こうとすると、パスワードが要求されます(期待どおり)が、mypwd(期待される)と空白のパスワード(期待されない)の両方でドキュメントを編集できます。
誰もがPDFを読み取れるが、「mypwd」が提供されている場合にのみ編集できるようにするための正しい構文は何ですか?
編集:
ここでは、空白のユーザーパスワードと強力なマスターパスワードを含むファイルがあります。Ilovepdf.comはそれがロック解除されていることを検出し、LibreofficeDrawがそれを編集できます。これは予想される動作ではありません。
https://www.dropbox.com/s/864p8xjh1ue041z/tracking_12750_16.pdf?dl=0
回答
私が見る限り、あなたのサンプルPDFは、空のユーザーパスワードと空でない所有者パスワードを使用して、希望どおりに暗号化されています。したがって、TCPDFは、要求されたとおりに実行します。
おそらく問題はあなたの期待が強すぎることです:プログラムが読むためにPDFを開くことができるなら、そのプログラムはそれがどんなに制限されていても、PDFで何でもすることができます。権限と異なる所有者およびユーザーの役割には、問題のソフトウェアの協力が必要であり、技術的に強制されていません。
これは仕様からすでに明らかです:
ドキュメントが正常に開かれ、復号化されると、PDFリーダーは技術的にドキュメントのコンテンツ全体にアクセスできます。暗号化ディクショナリで指定されたドキュメントのアクセス許可を強制するPDF暗号化に固有のものはありません。PDFリーダーは、ファイルに含まれるアクセス許可に従って暗号化されたPDFファイルへのユーザーアクセスを制限することにより、ドキュメント作成者の意図を尊重するものとします。
(ISO 32000-2、セクション7.6.4標準セキュリティハンドラー)
どうやらLibreofficeDrawは、PDF仕様で要求されているように動作しないだけです。つまり、ファイルに含まれるアクセス許可に従って、暗号化されたPDFファイルへのユーザーアクセスを適切に制限していません。おそらく設計によるものであり、おそらくプログラミングの不具合です。
あなたは単にあなたの期待が
TCPDFライブラリを使用して保護/暗号化されたPDFドキュメントを作成し、パスワードを要求せずにドキュメントビューが常にすべてのユーザーに付与されるようにしますが、編集しようとするとパスワードが要求されます。
上記のPDF仕様要件に準拠しているだけで、任意のPDFプロセッサ用の標準PDF暗号化機能を使用して実装することはできません。
PDF DRMソフトウェアソリューションのプロバイダーの中には、回避するのがそれほど簡単ではないものもありますが、どれも断固としたハッカーに耐えられるとは思えません。(問題の解決策がPDFをユーザーにまったく提供せず、カスタムのWebサービスベースのビューアー内の画像のみを提供する場合を除きます。ただし、これはユースケースではありません。)
実際の要件によっては、暗号化の代わりにデジタル署名を使用することを検討することをお勧めします。あなたの目的が、他の誰かが編集したものではなく、あなたのドキュメントの内容を受信者が確実に取得できるようにすることである場合、これはより適切に見えます。