Sanificazione dei documenti caricati
SanitiseLoadedDocument applica un criterio di sicurezza selezionato al grafo degli oggetti caricato completo e prepara una riscrittura completa compatta
Profili
| Profilo | Contenuto rimosso |
|---|---|
spJavaScriptOnly | Name tree JavaScript del documento e azioni JavaScript |
spActiveContent | JavaScript più voci di lancio, navigazione remota, URI, invio, importazione, multimedia, rendition, XFA e altri contenuti attivi correlati |
spUntrustedDocument | Tutto il contenuto attivo più i file incorporati, i file associati, le annotazioni di allegato file, le strutture payload rich-media e i tipi di azione sconosciuti trovati negli slot portatori di azioni |
spRichMediaOnly | Annotazioni rich-media e i loro stream payload distaccati |
spRedactionCleanup | Annotazioni Redact e di allegato file, informazioni del documento, metadati, file associati e incorporati, e ogni oggetto reso irraggiungibile da quelle rimozioni |
Dichiarazione
function SanitiseLoadedDocument(Profile: THPDFSanitiseProfile; out Report: THPDFSanitiseReport): Boolean; overload; function SanitiseLoadedDocument( out Report: THPDFSanitiseReport): Boolean; overload; function ScrubLoadedRedactionRemnants( out Report: THPDFSanitiseReport): Boolean;
L'overload senza profilo utilizza spUntrustedDocument
Rapporto dei risultati
THPDFSanitiseReport conta le azioni rimosse, le voci JavaScript, i file incorporati, le annotazioni a rischio, le voci XFA, i flussi di payload, i riferimenti scollegati, gli oggetti non raggiungibili e gli oggetti visitati
Changed indica se il grafo degli oggetti è cambiato, mentre LimitExceeded e InvalidObjectGraph spiegano un preflight rifiutato
Sicurezza e prestazioni
- L'operazione indicizza gli oggetti indiretti e risolve i riferimenti in tempo quasi lineare invece di scansionare ripetutamente l'elenco degli oggetti
- Un preflight sicuro da cicli visita il grafo candidato completo prima di qualsiasi mutazione e rifiuta i grafi superiori a due milioni di nodi univoci
- Il profilo non attendibile fallisce in modo chiuso per i dizionari di azione non riconosciuti collegati a chiavi portatrici di azione, mantenendo la navigazione
GoTolocale riconosciuta - La riscrittura completa marca gli oggetti indiretti non raggiungibili come eliminati e compatta i numeri degli oggetti attivi per rimuovere i byte di payload orfani ed evitare l'allocazione di riferimenti incrociati sparsi
- La pulizia della redaction preserva deliberatamente le azioni non correlate e il comportamento della pagina rimuovendo tutti gli oggetti irraggiungibili di font, immagini, payload e metadati
- Salvare sul percorso sorgente caricato scrive un file temporaneo gemello e sostituisce atomicamente la sorgente solo dopo che la riscrittura è riuscita
Esempio
var
Report: THPDFSanitiseReport;
begin
PDF.LoadFromFile('untrusted.pdf');
if not PDF.SanitiseLoadedDocument(spUntrustedDocument, Report) then
raise Exception.Create('Document sanitisation was rejected');
PDF.SaveLoadedDocument('sanitised.pdf');
end;
Note d'uso
- Chiamare il metodo solo dopo che
LoadFromFileo un altro flusso di lavoro di documento caricato ha avuto successo - Una chiamata riuscita forza una riscrittura completa ed esce dalla modalità di aggiornamento incrementale perché i byte rimossi non devono rimanere in una revisione precedente
- Il metodo rimuove le strutture attive e la raggiungibilità dei payload ma non esegue né interpreta gli script incorporati