Санітизація завантаженого документа
SanitiseLoadedDocument застосовує обрану політику безпеки до повного графа завантажених об'єктів та готує компактний повний перезапис
Профілі
| Профіль | Видалений вміст |
|---|---|
spJavaScriptOnly | Дерева імен JavaScript документа та дії JavaScript |
spActiveContent | JavaScript плюс запуск, віддалену навігацію, URI, надсилання, імпорт, мультимедіа, rendition, XFA та пов'язані записи активного вмісту |
spUntrustedDocument | Увесь активний вміст плюс вбудовані файли, пов'язані файли, анотації з вкладенням файлів, структури корисного навантаження rich-media та невідомі типи дій у слотах, що містять дії |
spRichMediaOnly | Анотації rich-media та їхні від'єднані потоки корисного навантаження |
spRedactionCleanup | Анотації Redact і вкладення файлів, інформація про документ, метадані, пов'язані та вбудовані файли, а також кожен об'єкт, який став недосяжним через ці вилучення |
Оголошення
function SanitiseLoadedDocument(Profile: THPDFSanitiseProfile;
out Report: THPDFSanitiseReport): Boolean; overload;
function SanitiseLoadedDocument(
out Report: THPDFSanitiseReport): Boolean; overload;
Перевантаження без профілю використовує spUntrustedDocument
Звіт про результат
THPDFSanitiseReport підраховує видалені дії, записи JavaScript, вбудовані файли, ризиковані анотації, записи XFA, потоки корисного навантаження, відокремлені посилання, недосяжні об'єкти та відвідані об'єкти
Changed вказує, чи змінився граф об'єктів, тоді як LimitExceeded та InvalidObjectGraph пояснюють відхилений попередній контроль
Безпека та продуктивність
- Операція індексує непрямі об'єкти та розв'язує посилання за часом, близьким до лінійного, замість багаторазового сканування списку об'єктів
- Циклобезпечний попередній контроль відвідує повний граф кандидатів перед будь-якою мутацією та відхиляє графи з понад двома мільйонами унікальних вузлів
- Профіль ненадійного документа завершується відмовою для невизнаних словників дій, приєднаних до ключів, що містять дії, проте зберігає розпізнану локальну навігацію
GoTo - Повний перезапис позначає недосяжні непрямі об'єкти як видалені та стискає номери живих об'єктів, щоб видалити байти осиротілих корисних даних і уникнути розрідженого розміщення перехресних посилань
- Збереження назад до завантаженого шляху джерела записує споріднений тимчасовий файл та атомарно замінює джерело лише після успішного перезапису
- Запис назад за шляхом завантаженого джерела пише сусідній тимчасовий файл і атомарно замінює джерело лише після успішного перезаписування
Приклад
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;
Примітки щодо використання
- Викликайте метод лише після успіху
LoadFromFileабо іншого робочого процесу завантаженого документа - Успішний виклик примусово виконує повний перезапис та виходить із режиму інкрементального оновлення, оскільки видалені байти не повинні залишатися у попередній редакції
- Метод видаляє активні структури та досяжність корисного навантаження, але не виконує та не інтерпретує вбудовані скрипти