Sanering av inlästa dokument
SanitiseLoadedDocument tillämpar en vald säkerhetsprofil på den fullständiga inlästa objektgrafen och förbereder en kompakt fullständig omskrivning
Profiler
| Profil | Borttaget innehåll |
|---|---|
spJavaScriptOnly | Dokumentets JavaScript-namnträd och JavaScript-åtgärder |
spActiveContent | JavaScript plus launch, fjärrnavigering, URI, insändning, import, multimedia, rendition, XFA och relaterade poster för aktivt innehåll |
spJavaScriptOnly | JavaScript-namnträd och JavaScript-åtgärder i dokumentet |
spActiveContent | JavaScript plus start, fjär navigering, URI, sändning, import, multimedia, rendition, XFA och relaterade aktivt innehåll-poster |
spUntrustedDocument | Allt aktivt innehåll plus inbäddade filer, associerade filer, filbilageannoteringar, strukturer för rich-media-nyttolast och okända åtgärdstyper i åtgärdsbärande fack |
Deklaration
function SanitiseLoadedDocument(Profile: THPDFSanitiseProfile;
out Report: THPDFSanitiseReport): Boolean; overload;
function SanitiseLoadedDocument(
out Report: THPDFSanitiseReport): Boolean; overload;
Överlagringen utan profil använder spUntrustedDocument
Resultatrapport
THPDFSanitiseReport räknar borttagna åtgärder, JavaScript-poster, inbäddade filer, riskfyllda annoteringar, XFA-poster, nyttolastströmmar, lösgjorda referenser, onåbara objekt och besökta objekt
Changed anger om objektgrafen ändrades, medan LimitExceeded och InvalidObjectGraph förklarar ett avvisat förhandskontroll
Säkerhet och prestanda
- Åtgärden indexerar indirekta objekt och avgör referenser i nästan linjär tid i stället för att upprepade gånger skanna objektlistan
- En cykelsäker förhandskontroll besöker den fullständiga kandidatgrafen före varje mutation och avvisar grafer över två miljoner unika noder
- Den otillförlitliga profilen misslyckas stängt för okända åtgärdsordlistor bifogade till åtgärdsbärande nycklar samtidigt som känd lokal
GoTo-navigering behålls - Den fullständiga omskrivningen markerar onåbara indirekta objekt som borttagna och komprimerar aktiva objektnummer för att ta bort föräldralösa nyttolastbyte och undvika gles korsreferensallokering
- Spara tillbaka till den inlästa källsökvägen skriver en syskon-temporärfil och ersätter källan atomärt först när omskrivningen lyckas
- Att spara tillbaka till den laddade källsökvägen skriver en tillfällig systerfil och ersätter källan atomärt först efter att omskrivningen lyckats
Exempel
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;
Användningsanteckningar
- Anropa metoden först efter att
LoadFromFileeller ett annat arbetsflöde för inlästa dokument har lyckats - Ett lyckat anrop tvingar fram en fullständig omskrivning och lämnar läget för inkrementella uppdateringar eftersom borttagna byte inte får kvarstå i en tidigare revision
- Metoden tar bort aktiva strukturer och nåbarhet för nyttolast men kör eller tolkar inte inbäddade skript