Saneamiento de documentos cargados
SanitiseLoadedDocument aplica una política de seguridad seleccionada al grafo de objetos cargado completo y prepara una reescritura completa compacta
Perfiles
| Perfil | Contenido eliminado |
|---|---|
spJavaScriptOnly | Árboles de nombres JavaScript de documento y acciones JavaScript |
spActiveContent | JavaScript más entradas de lanzamiento, navegación remota, URI, envío, importación, multimedia, rendition, XFA y contenidos activos relacionados |
spUntrustedDocument | Todo el contenido activo más archivos incrustados, archivos asociados, anotaciones de adjunto de archivo, estructuras de carga rich-media y tipos de acción desconocidos encontrados en ranuras con acciones |
spRichMediaOnly | Anotaciones rich-media y sus streams de carga desvinculados |
spRedactionCleanup | Anotaciones de redacción y de adjunto de archivo, información del documento, metadatos, archivos asociados e incrustados, y todo objeto hecho inalcanzable por esas eliminaciones |
Declaración
function SanitiseLoadedDocument(Profile: THPDFSanitiseProfile;
out Report: THPDFSanitiseReport): Boolean; overload;
function SanitiseLoadedDocument(
out Report: THPDFSanitiseReport): Boolean; overload;
function ScrubLoadedRedactionRemnants(
out Report: THPDFSanitiseReport): Boolean;
La sobrecarga sin perfil usa spUntrustedDocument
Informe del resultado
THPDFSanitiseReport cuenta las acciones eliminadas, entradas JavaScript, archivos incrustados, anotaciones de riesgo, entradas XFA, streams de carga, referencias desvinculadas, objetos inalcanzables, entradas de metadatos, anotaciones Redact, bytes de revisiones previas descartados y objetos visitados
Changed indica si el grafo de objetos cambió, mientras que LimitExceeded y InvalidObjectGraph explican un preflight rechazado
Seguridad y rendimiento
- La operación indexa los objetos indirectos y resuelve referencias en tiempo casi lineal en lugar de escanear repetidamente la lista de objetos
- Un preflight seguro frente a ciclos visita el grafo candidato completo antes de cualquier mutación y rechaza grafos de más de dos millones de nodos únicos
- El perfil no confiable falla de forma cerrada ante diccionarios de acción no reconocidos adjuntos a claves con acción, conservando la navegación
GoTolocal reconocida - La reescritura completa marca los objetos indirectos inalcanzables como eliminados y compacta los números de objeto vivos para eliminar bytes de payload huérfanos y evitar una asignación de referencias cruzadas dispersa
- La limpieza de redacción conserva deliberadamente acciones y comportamiento de página no relacionados mientras elimina todos los objetos inalcanzables de fuentes, imágenes, payload y metadatos
- Guardar de vuelta en la ruta de origen cargada escribe un archivo temporal hermano y sustituye atómicamente el origen solo después de que la reescritura tenga é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 trabajo de documento cargado tengan éxito - Una llamada con éxito fuerza una reescritura completa y sale del modo de actualización incremental porque los bytes eliminados no deben permanecer en una revisión anterior
- El método elimina estructuras activas y la alcanzabilidad de cargas útiles, pero no ejecuta ni interpreta scripts incrustados