Sanitizace načteného dokumentu
SanitiseLoadedDocument aplikuje vybranou bezpečnostní politiku na kompletní graf načtených objektů a připraví kompaktní úplné přepsání
Profily
| Profil | Odstraněný obsah |
|---|---|
spJavaScriptOnly | Name tree JavaScriptu dokumentu a JavaScript akce |
spActiveContent | JavaScript plus launch, vzdálená navigace, URI, submission, import, multimedia, rendition, XFA a související položky aktivního obsahu |
spUntrustedDocument | Veškerý aktivní obsah plus vložené soubory, přidružené soubory, anotace příloh souborů, struktury payloadů rich-media a neznámé typy akcí nalezené v slotech nesoucích akce |
spRichMediaOnly | Anotace rich-media a jejich odpojené payloadové streamy |
spRedactionCleanup | Anotace Redact a příloh souborů, informace o dokumentu, metadata, přidružené a vložené soubory a každý objekt, který se těmito odstraněními stal nedosažitelným |
Deklarace
function SanitiseLoadedDocument(Profile: THPDFSanitiseProfile;
out Report: THPDFSanitiseReport): Boolean; overload;
function SanitiseLoadedDocument(
out Report: THPDFSanitiseReport): Boolean; overload;
function ScrubLoadedRedactionRemnants(
out Report: THPDFSanitiseReport): Boolean;
Přetížení bez profilu používá spUntrustedDocument
Výsledný report
THPDFSanitiseReport počítá odstraněné akce, položky JavaScriptu, vložené soubory, riskantní anotace, položky XFA, payloadové streamy, odpojené reference, nedosažitelné objekty, položky metadat, anotace Redact, zahozené bajty dřívějších revizí a navštívené objekty
Changed indikuje, zda se graf objektů změnil, zatímco LimitExceeded a InvalidObjectGraph vysvětlují odmítnutý preflight
Bezpečnost a výkon
- Operace indexuje nepřímé objekty a řeší reference v téměř lineárním čase namísto opakovaného skenování seznamu objektů
- Preflight odolný vůči cyklům před jakoukoliv mutací navštíví kompletní kandidátní graf a odmítne grafy nad dva miliony unikátních uzlů
- Profil nedůvěryhodných dokumentů bezpečně selže u nerozpoznaných slovníků akcí připojených ke klíčům nesoucím akce, zatímco rozpoznanou lokální navigaci
GoTozachová - Úplné přepsání označí nedosažitelné nepřímé objekty jako smazané a zkomprimuje živá čísla objektů, čímž odstraní osiřelé bajty payloadů a vyhne se řídké alokaci křížových referencí
- Úklid redakcí záměrně zachová nesouvisející akce a chování stránek, zatímco odstraní všechny nedosažitelné objekty fontů, obrázků, payloadů a metadat
- Uložení zpět do cesty načteného zdroje zapíše sourozenecký dočasný soubor a atomicky nahradí zdroj až po úspěšném přepsání
Příklad
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;
Poznámky k použití
- Metodu volejte jen poté, co uspěje
LoadFromFilenebo jiný pracovní postup s načteným dokumentem - Úspěšné volání vynutí úplné přepsání a ukončí režim inkrementálních aktualizací, protože odstraněné bajty nesmí v dřívější revizi zůstat
- Metoda odstraní aktivní struktury a dosažitelnost payloadů, ale nevykonnává ani neinterpretuje vložené skripty