Sanitizacija učitanog dokumenta
SanitiseLoadedDocument primenjuje izabranu bezbednosnu politiku na kompletan učitani graf objekata i priprema kompaktni potpuni prepis
Profili
| Profil | Uklonjeni sadržaj |
|---|---|
spJavaScriptOnly | Stabla imena dokumentnog JavaScripta i JavaScript akcije |
spActiveContent | JavaScript plus launch, udaljena navigacija, URI, slanje, uvoz, multimedijski, rendition, XFA i srodni active-content zapisi |
spUntrustedDocument | Stabla imena JavaScript-a dokumenta i JavaScript akcije |
spRichMediaOnly | JavaScript plus launch, daljinsku navigaciju, URI, slanje, uvoz, multimediju, rendition, XFA i srodne unose aktivnog sadržaja |
spRedactionCleanup | Sav aktivni sadržaj plus ugrađene fajlove, pridružene fajlove, anotacije priloga fajla, strukture rich-media payload-a i nepoznate tipove akcija pronađene u slotovima koji nose akcije |
Deklaracija
function SanitiseLoadedDocument(Profile: THPDFSanitiseProfile;
out Report: THPDFSanitiseReport): Boolean; overload;
function SanitiseLoadedDocument(
out Report: THPDFSanitiseReport): Boolean; overload;
function ScrubLoadedRedactionRemnants(
out Report: THPDFSanitiseReport): Boolean;
Preopterećenje bez profila koristi spUntrustedDocument
Izveštaj o rezultatu
THPDFSanitiseReport broji uklonjene akcije, JavaScript unose, ugrađene fajlove, rizične anotacije, XFA unose, tokove payload-a, odvojene reference, nedostižne objekte i posećene objekte
Changed ukazuje da li se graf objekata promenio, dok LimitExceeded i InvalidObjectGraph objašnjavaju odbijeni preflight
Bezbednost i performanse
- Operacija indeksira indirektne objekte i razrešava reference u skoro linearnom vremenu umesto da višestruko skenira listu objekata
- Ciklus-besprekorni preflight posećuje kompletan graf kandidata pre bilo koje mutacije i odbacuje graf-ove preko dva miliona jedinstvenih čvorova
- Profil nepoverljivog dokumenta pada zatvoreno za neprepoznate rečnike akcija pridružene ključevima koji nose akcije, dok zadržava prepoznatu lokalnu
GoTonavigaciju - Potpuni prepis označava nedostižne indirektne objekte kao obrisane i kompaktno beleži žive brojeve objekata radi uklanjanja bajtova napuštenog payload-a i izbegavanja retke alokacije unakrsne reference
- Snimanje nazad u putanju učitanog izvora piše srodni privremeni fajl i atomarno zamenjuje izvor tek nakon što prepis uspe
- Čuvanje nazad na učitanu izvornu putanju piše srodnu privremenu datoteku i atomski zamenjuje izvor tek nakon što prepisivanje uspe
Primer
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;
Napomene o upotrebi
- Pozovite metodu tek nakon što
LoadFromFileili drugi tok rada učitanog dokumenta uspe - Uspešan poziv nameće potpuni prepis i izlazi iz režima inkrementalnih ažuriranja jer uklonjeni bajtovi ne smeju ostati u ranijoj reviziji
- Metoda uklanja aktivne strukture i dostupnost payload-a, ali ne izvršava i ne tumači ugrađene skripte