Assainissement des documents chargés
SanitiseLoadedDocument applique une politique de sécurité sélectionnée à l’ensemble du graphe d’objets chargé et prépare une réécriture complète compacte
Profils
| Profil | Contenu supprimé |
|---|---|
spJavaScriptOnly | Arbres de noms JavaScript du document et actions JavaScript |
spActiveContent | JavaScript plus lancement, navigation distante, URI, soumission, importation, multimédia, rendition, XFA et entrées de contenu actif associées |
spUntrustedDocument | Tout le contenu actif plus les fichiers embarqués, les fichiers associés, les annotations de pièce jointe, les structures de charge utile de média enrichi et les types d’actions inconnus trouvés dans les emplacements porteurs d’actions |
spRichMediaOnly | Annotations riches en médias et leurs flux de charge utile détachés |
spRedactionCleanup | Annotations de caviardure et de pièce jointe, informations du document, métadonnées, fichiers associés et embarqués, et tout objet rendu inaccessible par ces retraits |
Déclaration
function SanitiseLoadedDocument(Profile: THPDFSanitiseProfile;
out Report: THPDFSanitiseReport): Boolean; overload;
function SanitiseLoadedDocument(
out Report: THPDFSanitiseReport): Boolean; overload;
La surcharge sans profil utilise spUntrustedDocument
Rapport de résultat
THPDFSanitiseReport compte les actions supprimées, les entrées JavaScript, les fichiers embarqués, les annotations risquées, les entrées XFA, les flux de charge utile, les références détachées, les objets inaccessibles et les objets visités
Changed indique si le graphe d’objets a changé, tandis que LimitExceeded et InvalidObjectGraph expliquent un pré-vol refusé
Sûreté et performances
- L’opération indexe les objets indirects et résout les références en temps quasi linéaire plutôt que de balayer répétitivement la liste d’objets
- Un pré-vol protégé contre les cycles visite le graphe candidat complet avant toute mutation et rejette les graphes dépassant deux millions de nœuds uniques
- Le profil non fiable échoue de manière stricte pour les dictionnaires d’actions non reconnus attachés à des clés porteurs d’actions tout en conservant la navigation
GoTolocale reconnue - La réécriture complète marque les objets indirects inaccessibles comme supprimés et compacte les numéros d’objets vivants afin d’éliminer les octets orphelins et d’éviter une allocation creuse de la table de références croisées
- La réécriture complète marque les objets indirects inaccessibles comme supprimés et compacte les numéros d’objets vivants afin de supprimer les octets de charge utile orphelins et d’éviter une allocation de références croisées éparse
- L’enregistrement vers le chemin source chargé écrit un fichier temporaire frère et remplace atomiquement la source uniquement après le succès de la réécriture
Exemple
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;
Notes d’utilisation
- N’appelez la méthode qu’après le succès de
LoadFromFileou d’un autre flux de travail sur document chargé - Un appel réussi force une réécriture complète et quitte le mode de mise à jour incrémentale parce que les octets supprimés ne doivent pas rester dans une révision antérieure
- La méthode supprime les structures actives et l’accessibilité des charges utiles mais n’exécute ni n’interprète les scripts embarqués