Sanitização de Documento Carregado
SanitiseLoadedDocument aplica uma política de segurança selecionada ao gráfico de objetos carregado completo e prepara uma reescrita completa compacta
Perfis
| Perfil | Conteúdo removido |
|---|---|
spJavaScriptOnly | Árvores de nomes de JavaScript do documento e ações JavaScript |
spActiveContent | JavaScript mais lançamento, navegação remota, URI, submissão, importação, multimédia, rendition, XFA e entradas de conteúdo ativo relacionadas |
spRichMediaOnly | Anotações de multimédia avançada e as respetivas streams de payload destacadas |
spRedactionCleanup | Anotações Redact e de anexo de ficheiro, informação do documento, metadados, ficheiros associados e incorporados, e todos os objetos tornados inalcançáveis por essas remoções |
spUntrustedDocument | Todo o conteúdo ativo mais ficheiros incorporados, ficheiros associados, anotações de anexo de ficheiro, estruturas de payload de multimédia avançada e tipos de ação desconhecidos encontrados em ranhuras portadoras de ação |
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 utiliza spUntrustedDocument
Relatório de resultado
THPDFSanitiseReport conta as ações removidas, entradas JavaScript, ficheiros incorporados, anotações arriscadas, entradas XFA, fluxos de payload, referências destacadas, objetos inalcançáveis, entradas de metadados, anotações Redact, bytes de revisões anteriores descartados e objetos visitados
Changed indica se o gráfico de objetos foi alterado, enquanto LimitExceeded e InvalidObjectGraph explicam um pré-voo rejeitado
Segurança e desempenho
- A operação indexa objetos indiretos e resolve referências em tempo quase linear em vez de analisar repetidamente a lista de objetos
- Um pré-voo seguro contra ciclos visita o gráfico candidato completo antes de qualquer mutação e rejeita gráficos acima de dois milhões de nós únicos
- O perfil não fidedigno falha de forma fechada para dicionários de ação não reconhecidos anexados a chaves portadoras de ação, retendo ao mesmo tempo a navegação
GoTolocal reconhecida - A reescrita completa marca objetos indiretos inalcançáveis como eliminados e compacta os números de objetos ativos para remover bytes de payload órfão e evitar a alocação dispersa de referência cruzada
- A limpeza de redação preserva deliberadamente ações não relacionadas e o comportamento da página, removendo todos os objetos inalcançáveis de fontes, imagens, payloads e metadados
- Gravar de volta para o caminho de origem carregado escreve um ficheiro temporário irmão e substitui a origem de forma atómica apenas depois de a reescrita ser bem-sucedida
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 utilização
- Chame o método apenas depois de
LoadFromFileou de outro fluxo de trabalho de documento carregado ser bem-sucedido - Uma chamada bem-sucedida força uma reescrita completa e sai do modo de atualização incremental porque os bytes removidos não podem permanecer numa revisão anterior
- O método remove estruturas ativas e alcançabilidade de payload, mas não executa nem interpreta scripts incorporados