Loaded Document Sanitisation
SanitiseLoadedDocument aplica uma política de segurança selecionada ao grafo de objetos carregado completo e prepara uma reescrita completa compact
Profiles
| Profile | Conteúdo removido |
|---|---|
spJavaScriptOnly | Name trees de JavaScript do documento e ações JavaScript |
spActiveContent | JavaScript mais entradas de launch, navegação remota, URI, submissão, importação, multimídia, rendition, XFA e conteúdo ativo relacionado |
spUntrustedDocument | Todo conteúdo ativo mais arquivos embutidos, arquivos associados, anotações de anexo de arquivo, estruturas de payload rich media e tipos de ação desconhecidos encontrados em slots que comportam ações |
spRichMediaOnly | Anotações rich media e os streams de payload desanexados delas |
spRedactionCleanup | Anotações Redact e de anexo de arquivo, informações do documento, metadados, arquivos associados e embutidos, e todo objeto tornado inalcançável por essas remoções |
Declaração
function SanitiseLoadedDocument(Profile: THPDFSanitiseProfile;
out Report: THPDFSanitiseReport): Boolean; overload;
function SanitiseLoadedDocument(
out Report: THPDFSanitiseReport): Boolean; overload;
function ScrubLoadedRedactionRemnants(
out Report: THPDFSanitiseReport): Boolean;
A sobrecarga sem perfil usa spUntrustedDocument
Relatório de resultado
THPDFSanitiseReport conta ações removidas, entradas JavaScript, arquivos embutidos, anotações arriscadas, entradas XFA, streams de payload, referências desanexadas, objetos inalcançáveis, entradas de metadados, anotações Redact, bytes descartados de revisões anteriores e objetos visitados
Changed indica se o grafo de objetos mudou, enquanto LimitExceeded e InvalidObjectGraph explicam um preflight rejeitado
Segurança e desempenho
- A operação indexa objetos indiretos e resolve referências em tempo quase linear, em vez de escanear repetidamente a lista de objetos
- Um preflight seguro contra ciclos visita o grafo candidato completo antes de qualquer mutação e rejeita grafos com mais de dois milhões de nós únicos
- O perfil não confiável falha fechado para dicionários de ação não reconhecidos anexados a chaves que comportam ações, mantendo navegação local
GoToreconhecida - A reescrita completa marca objetos indiretos inalcançáveis como excluídos e compacta números de objeto vivos para remover bytes órfãos de payload e evitar alocação esparsa de cross-references
- A limpeza de redação preserva deliberadamente ações não relacionadas e o comportamento de páginas, removendo todo objeto inalcançável de fonte, imagem, payload e metadados
- Salvar de volta no caminho de origem carregado grava um arquivo temporário irmão e substitui atomicamente a origem apenas depois que a reescrita tem sucesso
Exemplo
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
- Chame o método apenas depois que
LoadFromFileou outro fluxo de trabalho de documento carregado tiver sucesso - Uma chamada com sucesso força uma reescrita completa e sai do modo de atualização incremental, porque os bytes removidos não devem permanecer em uma revisão anterior
- O método remove estruturas ativas e a alcançabilidade de payloads, mas não executa nem interpreta scripts embutidos