Limites de sécurité du chargement et des lecteurs en continu
Traduction informative : en cas de divergence, la source zh-TW fait foi.
Le chargement des paquets et OdsStreamReader/OdtStreamReader traitent des entrées ZIP/XML non fiables. Les lecteurs ne construisent pas le DOM complet, mais allouent des tampons pour
la ligne courante, le texte des nœuds, la décompression ZIP et le lecteur XML. Une faible mémoire
résidente ne rend pas l’utilisation des ressources indépendante de la taille d’entrée.
Limites du paquet principal
OdfDocument.Load, les façades Load et OdfPackage.Open partagent les budgets de OdfLoadOptions.
| Limite | Valeur par défaut | Protection |
|---|---|---|
| Entrées ZIP | 5,000 | Évite l’épuisement du processeur et de la mémoire par de nombreuses petites entrées |
| Taille décompressée d’une entrée | 500 MiB | Limite l’expansion d’une entrée ZIP |
| Taille décompressée totale | 1 GiB | Limite l’expansion totale du paquet |
| Entrée brute non recherchable | 1 GiB | Limite la mise en mémoire tampon avant l’expansion ZIP |
| Caractères d’un document XML | 64 MiB | Limite l’analyse XML et la construction du DOM |
Les quatre limites ZIP doivent être positives ; zéro ou une valeur négative déclenche immédiatement ArgumentOutOfRangeException. Seul MaxXmlCharactersInDocument = 0 désactive la limite XML. Tous les lecteurs XML doivent interdire les DTD et resolvers externes. Les nouveaux chemins doivent réutiliser OdfLoadOptions. Les chemins de validation des paquets et du Flat XML (OdfPackageValidator, OdfFlatDocumentValidator et l’analyse des règles de profil) appliquent également MaxXmlCharactersInDocument : la validation des paquets utilise package.LoadOptions, tandis que la validation Flat utilise OdfValidationOptions.LoadOptions (la valeur par défaut de 64 MiB de OdfLoadOptions en cas d’omission). Les signatures, horodatages, données de révocation de certificat et réponses réseau externes ont leurs propres limites, plus petites ; la limite du paquet principal ne les remplace pas. Pour les règles de contenu, utilisez OdfPackageValidator, SanitizeMacros, la validation des signatures ou pwsh eng/Test-OdfPolicy.ps1.
Limites des lecteurs en continu
| Lecteur | Limite | Valeur par défaut |
|---|---|---|
| ODS | Caractères XML | 64 MiB |
| ODS | Lignes par feuille | 1,048,576 |
| ODS | Colonnes par ligne | 16,384 |
| ODS | Une déclaration repeat | lignes 1,048,576 ; colonnes 16,384 |
| ODS | Texte extrait d’une cellule | 16 MiB |
| ODT | Caractères XML | 64 MiB |
| ODT | Nœuds texte renvoyés | 1,000,000 |
| ODT | Texte extrait d’un nœud | 16 MiB |
La lecture échoue lorsqu’une limite est dépassée ; elle ne tronque pas repeat pour renvoyer des données apparemment complètes. Ne relancez pas automatiquement sans limites.
LeaveOpen vaut false par défaut. Avec true, la suppression du lecteur ferme le flux d’entrée XML et
le lecteur ZIP, mais laisse ouvert le flux externe fourni par l’appelant.
Conservez les limites par défaut pour les documents non fiables et validez d’abord le paquet et le schéma.
Augmenter les limites XML ou de texte accroît aussi les risques mémoire et CPU DoS.
MaxXmlCharactersInDocument = 0 ne désactive que la limite de caractères XML. Les limites, la validation
et l’assainissement réduisent les risques sans garantir une sécurité absolue contre les documents malveillants.
Les options des lecteurs ODS et ODT valident les règles lors de l’affectation : la limite XML accepte zéro, tandis que les limites de lignes, colonnes, repeat, nœuds et texte doivent être supérieures à zéro.