Il metodo TCPDF SetProtection non funziona come previsto
Ho iniziato a scrivere qui:
Protezione con password PDF PHP (non aperto senza password)
Ma non posso aggiungere commenti a causa della mia reputazione qui (sto meglio su AskUbuntu ma non posso prendere i miei punti rep da lì). Ho anche iniziato una taglia lì, e se qualcuno risponderà qui in due giorni con una soluzione accettabile, lo assegnerò lì.
Ora, il problema: il metodo SetProtection non funziona come previsto.
Comportamento desiderato: creare un documento PDF protetto / crittografato con libreria TCPDF in modo che la visualizzazione del documento sia sempre concessa a tutti senza chiedere alcuna password, ma se si tenta di modificare, viene richiesta una password.
Uso la seguente sintassi:
$ pdf-> SetProtection (array ('modify', 'copy', 'annot-forms', 'fill-forms', 'extract', 'assemble'), null, 'mypwd', 1);
- Posso aprire il file con un visualizzatore di PDF come previsto .
- Se provo ad aprire il file con Libreoffice Draw , viene richiesta la password ( come previsto ), ma riesco a modificare il documento SIA con mypwd ( previsto ) E fornendo una password vuota ( NON prevista ).
Qual è la sintassi corretta, se esiste, per avere il pdf leggibile da tutti MA modificabile SOLO con "mypwd" fornito?
MODIFICA :
eccoti con un file con una password utente vuota e una password principale complessa. Ilovepdf.com lo trova SBLOCCATO, Libreoffice Draw può modificarlo. Questo NON è il comportamento previsto.
https://www.dropbox.com/s/864p8xjh1ue041z/tracking_12750_16.pdf?dl=0
Risposte
Per quanto posso vedere, il tuo PDF di esempio è crittografato nel modo desiderato, con una password utente vuota e una password del proprietario non vuota. Quindi, TCPDF fa proprio quello che gli è stato chiesto di fare.
Molto probabilmente il problema è che la tua aspettativa è troppo forte : se un programma può aprire un PDF per la lettura, quel programma può fare qualsiasi cosa con il PDF, non importa quanto limitato sia configurato. Le autorizzazioni e i diversi ruoli di proprietario e utente richiedono la collaborazione del software in questione, non sono tecnicamente applicati.
Questo è già chiaro dalle specifiche:
Una volta che il documento è stato aperto e decrittografato con successo, un lettore PDF ha tecnicamente accesso all'intero contenuto del documento. Non c'è nulla di inerente alla crittografia PDF che imponga le autorizzazioni del documento specificate nel dizionario di crittografia. I lettori PDF devono rispettare l'intento del creatore del documento limitando l'accesso dell'utente a un file PDF crittografato in base alle autorizzazioni contenute nel file.
(ISO 32000-2, sezione 7.6.4 Gestore della sicurezza standard)
Apparentemente Libreoffice Draw semplicemente non si comporta come richiesto dalla specifica PDF, ovvero non limita adeguatamente l'accesso dell'utente a un file PDF crittografato in base alle autorizzazioni contenute nel file . Probabilmente in base alla progettazione, probabilmente solo un problema tecnico di programmazione.
Dovresti semplicemente essere consapevole che le tue aspettative
creare un documento PDF protetto / crittografato con la libreria TCPDF in modo che la visualizzazione del documento sia sempre concessa a tutti senza chiedere alcuna password, ma se si tenta di modificare, viene richiesta una password.
non può essere implementato utilizzando le funzionalità di crittografia PDF standard per processori PDF arbitrari, semplicemente per quelli che seguono il requisito della specifica PDF sopra citato.
Ci sono alcuni fornitori di soluzioni software PDF DRM che non sono così facili da aggirare, ma dubito che qualcuno di loro possa resistere a un determinato hacker. (A meno che la soluzione in questione non consenta affatto di fornire il PDF all'utente ma solo le immagini in un visualizzatore personalizzato basato sul servizio web; ma questo non è il tuo caso d'uso.)
A seconda delle tue effettive esigenze, potresti voler indagare sull'utilizzo delle firme digitali invece della crittografia; se il tuo obiettivo è assicurarti che qualsiasi destinatario possa essere sicuro di aver ricevuto il contenuto del tuo documento e non quello che qualcun altro ha modificato in esso, questo sembra più appropriato.