Avete un PDF da condividere, e dentro c'è un nome che non deve uscire. Ci mettete sopra un bel rettangolo nero, salvate, riaprite: sparito. Poi qualcuno seleziona il testo, lo copia, lo incolla, e il nome ricompare. Non ha forzato nessuna protezione: ha letto qualcosa che era ancora nel file.

In questo articolo vi lascio i risultati della prova fatta per la puntata, i tre posti in cui un dato si nasconde e il percorso per controllare un PDF prima di mandarlo.

Se preferite, vi mostro tutto anche nel video qui sopra.

Indice

Quattro copie dello stesso documento

La prova della puntata usa PyMuPDF 1.26.7, una libreria Python per leggere e modificare i PDF, e un PDF sintetico: un nome inventato su un programma di corso, ripetuto anche nelle proprietà del file e in un allegato interno. Nessun dato reale.

Lo stesso documento è stato trattato in quattro modi diversi, e su ogni copia il nome è stato cercato in tre posti: nella pagina, nelle proprietà e nell'allegato. Ecco che cosa è rimasto.

Copia Nome nella pagina completa Nome nelle proprietà Nome nell'allegato
Rettangolo sovrapposto Recuperabile Presente Presente
Area visibile ritagliata Recuperabile riaprendo l'area completa Presente Presente
Rimozione applicata alla pagina Non trovato dagli estrattori usati Presente Presente
Pagina, proprietà e allegato trattati Non trovato nei controlli svolti Assente nel controllo Allegato rimosso

Perché il rettangolo e il ritaglio non bastano

Già qui c'è la prima sorpresa, secondo me la più istruttiva: due pagine che sembrano ripulite allo stesso modo contengono informazioni diverse.

Il rettangolo è un cartoncino appoggiato su una scritta: cambia quello che vedono gli occhi, non quello che c'è sotto. Il ritaglio, invece, sposta solo la cornice. La parte esclusa non si vede più, ma resta nel file.

E qui arriva il caso più subdolo. Sul file ritagliato, PyMuPDF rispettava l'area visibile e non mostrava il nome, mentre Poppler, un'altra libreria per leggere i PDF, lo recuperava subito. Due programmi, due risposte: un solo controllo negativo non basta.

Il ritaglio di PDFix, la mia app

Ve lo mostro anche su un mio progetto, PDFix. Al commit 1baf79d7488fd3313d1c1e91dd41b376195d6a09, l'operazione di ritaglio cambia il CropBox, cioè il riquadro visibile della pagina.

È perfetta per togliere un bordo fastidioso da una scansione. Il contenuto fuori dal riquadro, però, rimane nel file, quindi il ritaglio non serve a togliere un dato. Cancellare completamente il dato è una funzione che posso pensare di implementare in futuro, ma al momento in PDFix non c'è.

Ci tengo a mostrarvi anche i confini delle mie app: se conoscete chi ha scritto un programma, dovete comunque capire che cosa fa.

Come si rimuove davvero un dato

Per rimuovere davvero un dato serve una funzione pensata apposta, quella che in inglese si chiama redaction. Il procedimento ha tre tempi: prima si indicano le aree da eliminare, poi si applica la rimozione, e infine si scrive un nuovo file eliminando gli oggetti che non servono più (opzioni di salvataggio).

E attenzione, perché quando segnate un'area non l'avete ancora tolta: la rimozione va applicata. Un'anteprima con i riquadri al loro posto non vuol dire che avete finito.

La pagina pulita, poi, non basta: nella prova il nome stava anche nelle proprietà e nell'allegato. Pagina, proprietà e allegati sono i tre posti da controllare, e questa è la cosa importante.

Con le scansioni la cosa si fa ancora più interessante. Il nome può stare dentro l'immagine, e in più può esserci un livello di testo creato dal riconoscimento automatico dei caratteri, il cosiddetto OCR. Se togliete solo il testo riconosciuto, il nome resta leggibile nell'immagine; se coprite solo l'immagine, il testo può restare nascosto da un'altra parte.

E se il file non vi permette di copiare il testo? Attenzione, perché non è la prova che il testo non ci sia: se si può selezionare o no dipende da come è costruito il documento e da come il programma lo legge.

Il percorso prima di mandare un PDF

Il percorso che vi propongo è semplice. Per prima cosa lavorate su una copia, tenendo l'originale separato, e stabilite subito quali informazioni togliere. Poi usate una funzione pensata per la rimozione, non un rettangolo né un ritaglio.

A quel punto chiudete il documento, riaprite il risultato e cercate proprio i dati che volevate togliere, in quattro modi: con la ricerca del testo, con l'estrazione, controllando proprietà e allegati e, infine, guardando la pagina. Se potete, fatelo con più di un programma, perché la prova ha mostrato che due programmi possono dare risposte diverse sullo stesso file.

Alla fine scegliete bene quale file condividere. Sembra una banalità, lo so, ma se preparate la copia pulita e poi allegate l'originale, siete di nuovo al punto di partenza.

Una precisazione onesta: questi risultati valgono per il documento della prova, e non sono la verifica di un PDF qualsiasi.

La regola da portarvi via

Insomma, la regola è questa, e io la ripeterei cento volte: se avete tolto un dato da un posto, non è detto che l'abbiate tolto da tutti gli altri. Prima di premere «Invia», chiedetevi che cosa c'è sotto, quali altre copie del dato contiene il documento e quale file state per mandare.

Per approfondire

Il software libero vi dà in più la possibilità di guardare il meccanismo dall'interno, come abbiamo appena fatto con il ritaglio di PDFix. PDFix è un'app che sviluppo io, quindi ve la segnalo dichiarando il legame: se vi serve togliere i bordi da una scansione, potete provarla, e il codice è su GitHub. Ricordatevi solo che il suo ritaglio sposta la cornice e non cancella niente.

Se invece volete automatizzare la rimozione, la documentazione di PyMuPDF spiega come applicarla alla pagina e come salvare il file ripulito.

Fonti