Saneamiento de documento cargado
SanitiseLoadedDocument aplica una política de seguridad seleccionada al grafo de objetos cargado completo y prepara una reescritura completa compacta
Perfiles
| Profile | Removed content |
|---|---|
spJavaScriptOnly | Document JavaScript name trees and JavaScript actions |
spActiveContent | JavaScript plus launch, remote navigation, URI, submission, import, multimedia, rendition, XFA, and related active-content entries |
spJavaScriptOnly | Árboles de nombres de JavaScript del documento y acciones de JavaScript |
spActiveContent | JavaScript más entradas de lanzamiento, navegación remota, URI, envío, importación, multimedia, rendition, XFA y contenido activo relacionado |
spUntrustedDocument | Todo el contenido activo más archivos embebidos, archivos asociados, anotaciones de adjunto de archivo, estructuras de payload multimedia enriquecido y tipos de acción desconocidos en ranuras que admiten acciones |
Declaración
function SanitiseLoadedDocument(Profile: THPDFSanitiseProfile;
out Report: THPDFSanitiseReport): Boolean; overload;
function SanitiseLoadedDocument(
out Report: THPDFSanitiseReport): Boolean; overload;
La sobrecarga sin perfil usa spUntrustedDocument
Informe de resultado
THPDFSanitiseReport cuenta las acciones eliminadas, entradas de JavaScript, archivos embebidos, anotaciones riesgosas, entradas XFA, flujos de payload, referencias separadas, objetos inalcanzables y objetos visitados
Changed indica si el grafo de objetos cambió, mientras que LimitExceeded e InvalidObjectGraph explican un preflight rechazado
Seguridad y rendimiento
- La operación indexa objetos indirectos y resuelve referencias en tiempo casi lineal en lugar de recorrer la lista de objetos de forma repetida
- Un preflight seguro contra ciclos visita el grafo candidato completo antes de cualquier mutación y rechaza grafos por encima de dos millones de nodos únicos
- El perfil no confiable falla de forma cerrada para diccionarios de acción no reconocidos adjuntos a llaves que admiten acciones, mientras conserva la navegación local
GoToreconocida - La reescritura completa marca los objetos indirectos inalcanzables como eliminados y compacta los números de objetos vivos para quitar bytes de payload huérfanos y evitar la asignación dispersa de referencias cruzadas
- Guardar de vuelta en la ruta de origen cargada escribe un archivo temporal adyacente y reemplaza el origen de forma atómica solo después de que la reescritura tenga éxito
- Al guardar sobre la ruta del origen cargado, se escribe un archivo temporal hermano y el original solo se reemplaza de forma atómica cuando la reescritura termina con éxito
Ejemplo
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;
Notas de uso
- Llame al método solo después de que
LoadFromFileu otro flujo de documento cargado tenga éxito - Una llamada exitosa fuerza una reescritura completa y sale del modo de actualización incremental porque los bytes eliminados no deben quedar en una revisión anterior
- El método elimina estructuras activas y la alcanzabilidad de payloads, pero no ejecuta ni interpreta scripts embebidos