Bereinigung geladener Dokumente
SanitiseLoadedDocument wendet eine ausgewählte Sicherheitsrichtlinie auf den vollständigen geladenen Objektgraphen an und bereitet ein kompaktes vollständiges Umschreiben vor
Profile
| Profil | Removed content |
|---|---|
spJavaScriptOnly | JavaScript-Namensbäume des Dokuments und JavaScript-Aktionen |
spActiveContent | JavaScript plus Launch, ferne Navigation, URI, Submission, Import, Multimedia, Rendition, XFA und zugehörige Active-Content-Einträge |
spUntrustedDocument | Alle aktiven Inhalte plus eingebettete Dateien, zugeordnete Dateien, Dateianhang-Anmerkungen, Rich-Media-Payload-Strukturen und unbekannte Aktionstypen in aktionstragenden Slots |
spRichMediaOnly | Rich-Media-Anmerkungen und ihre abgetrennten Payload-Streams |
spRedactionCleanup | Redact- und Dateianhang-Anmerkungen, Dokumentinformationen, Metadaten, zugeordnete und eingebettete Dateien sowie jedes Objekt, das durch diese Entfernungen unerreichbar wird |
Deklaration
function SanitiseLoadedDocument(Profile: THPDFSanitiseProfile;
out Report: THPDFSanitiseReport): Boolean; overload;
function SanitiseLoadedDocument(
out Report: THPDFSanitiseReport): Boolean; overload;
Die Überladung ohne Profil verwendet spUntrustedDocument
Ergebnisbericht
THPDFSanitiseReport zählt entfernte Aktionen, JavaScript-Einträge, eingebettete Dateien, riskante Annotationen, XFA-Einträge, Payload-Streams, losgelöste Referenzen, unerreichbare Objekte und besuchte Objekte
Changed gibt an, ob sich der Objektgraph geändert hat, während LimitExceeded und InvalidObjectGraph einen abgelehnten Preflight erklären
Sicherheit und Leistung
- Die Operation indiziert indirekte Objekte und löst Verweise in fast linearer Zeit auf, statt die Objektliste wiederholt zu durchlaufen
- Ein zyklussicherer Vorlauf besucht den vollständigen Kandidatengraphen vor jeder Mutation und weist Graphen mit mehr als zwei Millionen eindeutigen Knoten zurück
- Das Profil für nicht vertrauenswürdige Quellen scheitert geschlossen bei unbekannten Aktionswörterbüchern an aktionstragenden Schlüsseln und behält erkannte lokale
GoTo-Navigation - Das vollständige Neuschreiben markiert unerreichbare indirekte Objekte als gelöscht und verdichtet lebende Objektnummern, um verwaiste Payload-Bytes zu entfernen und lückenhafte XRef-Allozierung zu vermeiden
- Die Schwärzungs-Aufräumung bewahrt bewusst unbeteiligte Aktionen und Seitenverhalten und entfernt alle unerreichbaren Schrift-, Bild-, Payload- und Metadatenobjekte
- Das Zurückspeichern auf den geladenen Quellpfad schreibt eine nebengeordnete temporäre Datei und ersetzt die Quelle erst nach erfolgreichem Neuschreiben atomar
Beispiel
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;
Verwendungshinweise
- Rufen Sie die Methode erst auf, nachdem
LoadFromFileoder ein anderer geladener Dokumenten-Workflow erfolgreich war - Ein erfolgreicher Aufruf erzwingt ein vollständiges Umschreiben und beendet den Inkremental-Update-Modus, da entfernte Bytes nicht in einer früheren Revision verbleiben dürfen
- Die Methode entfernt aktive Strukturen und Payload-Erreichbarkeit, führt jedoch keine eingebetteten Skripte aus oder interpretiert diese