Sanityzacja wczytanego dokumentu
SanitiseLoadedDocument stosuje wybraną politykę bezpieczeństwa do pełnego wczytanego grafu obiektów i przygotowuje kompaktowe pełne przepisanie
Profile
| Profil | Usuana treść |
|---|---|
spJavaScriptOnly | Drzewa nazw JavaScript dokumentu i akcje JavaScript |
spActiveContent | JavaScript plus wpisy launch, nawigacji zdalnej, URI, submission, import, multimedia, rendition, XFA i powiązana aktywna treść |
spUntrustedDocument | Cała aktywna treść plus pliki osadzone, pliki skojarzone, adnotacje file-attachment, struktury payloadów rich media i nieznane typy akcji znalezione w slotach z akcjami |
spRichMediaOnly | Adnotacje rich media i ich odłączone strumienie payloadów |
spRedactionCleanup | Adnotacje redact i file-attachment, informacje o dokumencie, metadane, pliki skojarzone i osadzone oraz każdy obiekt, który przez te usunięcia stał się nieosiągalny |
Deklaracja
function SanitiseLoadedDocument(Profile: THPDFSanitiseProfile;
out Report: THPDFSanitiseReport): Boolean; overload;
function SanitiseLoadedDocument(
out Report: THPDFSanitiseReport): Boolean; overload;
Przeciążenie bez profilu używa spUntrustedDocument
Result report
THPDFSanitiseReport zlicza usunięte akcje, wpisy JavaScript, osadzone pliki, ryzykowne adnotacje, wpisy XFA, strumienie ładunków, odłączone odwołania, nieosiągalne obiekty i odwiedzone obiekty
Changed wskazuje, czy graf obiektów uległ zmianie, podczas gdy LimitExceeded i InvalidObjectGraph wyjaśniają odrzucony preflight
Bezpieczeństwo i wydajność
- Operacja indeksuje obiekty pośrednie i rozwiązuje odwołania w czasie bliskim liniowemu zamiast wielokrotnie skanować listę obiektów
- Cykl-bezpieczny preflight odwiedza pełny graf kandydatów przed każdą mutacją i odrzuca grafy powyżej dwóch milionów unikalnych węzłów
- Profil niezaufany zamyka się przy niepowodzeniu dla nierozpoznanych słowników akcji dołączonych do kluczy przenoszących akcje, przy zachowaniu rozpoznanej nawigacji lokalnej
GoTo - Pełne przepisanie oznacza nieosiągalne obiekty pośrednie jako usunięte i upakowuje aktywne numery obiektów, aby usunąć bajty ładunku sierocych i uniknąć rzadkiej alokacji odsyłaczy krzyżowych
- Zapis z powrotem do ścieżki wczytanego źródła zapisuje plik tymczasowy rodzeństwa i atomowo zastępuje źródło dopiero po powodzeniu przepisania
- Zapis z powrotem do źródłowej ścieżki załadowanego dokumentu pisze tymczasowy plik siostrzany i atomowo podmienia źródło dopiero po udanym przepisaniu
Przykład
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;
Uwagi dotyczące użycia
- Wywołaj metodę dopiero po tym, jak
LoadFromFilelub inny przepływ pracy wczytanego dokumentu zakończy się powodzeniem - Udane wywołanie wymusza pełne przepisanie i wychodzi z trybu aktualizacji przyrostowej, ponieważ usunięte bajty nie mogą pozostać we wcześniejszej rewizji
- Metoda usuwa aktywne struktury i osiągalność ładunków, ale nie wykonuje ani nie interpretuje osadzonych skryptów