目錄 / Table of Contents

Beveiligingslimieten voor laden en streaming readers

Informatieve vertaling; bij verschillen geldt de gezaghebbende zh-TW-bron.

Pakketladen en OdsStreamReader/OdtStreamReader verwerken niet-vertrouwde ZIP/XML-invoer. De readers bouwen geen volledig DOM, maar reserveren buffers voor de huidige rij, knooptekst, ZIP-decompressie en XML-reader. Laag resident geheugen maakt invoergrootte niet irrelevant.

Limieten voor het kernpakket

OdfDocument.Load, formaatspecifieke Load-facades en OdfPackage.Open delen de resourcebudgetten van OdfLoadOptions.

Limiet Standaard Beschermingsdoel
ZIP-items 5,000 Voorkomt uitputting van CPU en geheugen door veel kleine items
Uitgepakte grootte van één item 500 MiB Begrens de expansie van één ZIP-item
Totale uitgepakte grootte 1 GiB Begrens de totale expansie van het pakket
Ruwe niet-zoekbare invoergrootte 1 GiB Begrens buffering vóór ZIP-expansie
Tekens in één XML-document 64 MiB Begrens XML-verwerking en DOM-opbouw

De vier ZIP-limieten moeten positief zijn; nul of negatieve waarden veroorzaken direct ArgumentOutOfRangeException. Alleen MaxXmlCharactersInDocument = 0 schakelt de XML-limiet uit. Alle XML-readers moeten externe DTD's en resolvers verbieden. Nieuwe laadpaden moeten OdfLoadOptions gebruiken. Validatiepaden voor pakketten en Flat XML (OdfPackageValidator, OdfFlatDocumentValidator en scans van profielregels) passen ook MaxXmlCharactersInDocument toe: pakketvalidatie gebruikt package.LoadOptions, terwijl Flat-validatie OdfValidationOptions.LoadOptions gebruikt (standaard 64 MiB van OdfLoadOptions wanneer niet opgegeven). Handtekeningen, tijdstempels, gegevens over ingetrokken certificaten en externe netwerkreacties hebben eigen, kleinere limieten; de kernpakketlimiet vervangt deze niet. Gebruik voor inhoudsbeleid OdfPackageValidator, SanitizeMacros, handtekeningvalidatie of pwsh eng/Test-OdfPolicy.ps1.

Overige bescherming van bronnen en uitvoer

Naast de limieten voor het pakket en de streaming-readers beschermen ook de volgende vaste limieten tegen niet-vertrouwde invoer. Deze waarden zijn momenteel vaste constanten in de code en kunnen nog niet worden ingesteld via OdfLoadOptions of een opties-object. Beoordeel de gevolgen voor geheugen en stack voordat u een limiet verhoogt of verwijdert.

Onderdeel Limiet Gedrag bij overschrijding
Werkelijke uitgepakte grootte van een ZIP-item Mag de in de header opgegeven ongecomprimeerde grootte niet overschrijden (MMF-pad bij laden via bestandspad) SecurityException
Beschadigde centrale ZIP-directory of ZIP64 Het snelle MMF-pad ondersteunt geen ZIP64 en geen enkel record dat niet volledig kan worden ontleed, mag stilzwijgend worden overgeslagen Valt terug op validatie en lezen via ZipArchive
Nestingsdiepte van XML-elementen 256 niveaus (OdfXmlReader.MaxElementDepth); geldt voor DOM-laden, Flat ODF-laden, validatie van profielregels en RDF-parsing Laden werpt SecurityException; validatie meldt ODF0303 of ODF0301
Nestingsdiepte bij formuleparsing Elk 256 niveaus voor haakjes, functieargumenten, inline arrays en opeenvolgende prefixoperatoren InvalidOperationException
Totaal aantal operatorknooppunten in een formule 4.096 (FormulaParser.MaxOperatorNodes); binaire, unaire, procent- en verwijzingsoperatoren samen. Geketende formules vormen linksdiepe bomen waarvan evaluatie en serialisatie niveau voor niveau recursief verlopen; deze limiet zorgt dat een gewone threadstack volstaat InvalidOperationException
Stackmarge bij formulerecursie Parsing, evaluatie, het ophalen van bereiken en serialisatie controleren de resterende stack (RuntimeHelpers.EnsureSufficientExecutionStack) voordat elk recursieniveau wordt betreden; zelfs formules dicht bij de limieten laten het proces niet crashen op threads met een kleine stack van 128–256 KB InsufficientExecutionStackException; EvaluateFormulas zet deze om in een formule-evaluatie-uitzondering of #VALUE!
Lengte van het tekenreeksresultaat van een formule 1.048.576 tekens (&, functieresultaten, SUBSTITUTE, REPT) Geeft #VALUE! terug
Formulefuncties waarvan de lusgrens een argument is BINOMDIST cumulatief 100.000; CRITBINOM, HYPGEOMDIST cumulatief 100.000; POISSON cumulatief 1.000.000; DB, DDB, VDB, CUMIPMT perioden 1.000.000 Geeft #NUM! terug
Rij-/kolomindex van het werkblad Rij 1.048.575, kolom 16.383 (OdfSpreadsheetLimits) ArgumentOutOfRangeException
Document toevoegen Een document mag niet aan zichzelf worden toegevoegd ArgumentException
Collaboration addColumns Begrensd door het aantal kolommen en het totale aantal cellen van OdtOperationSafetyOptions Registreert de veiligheidslimiet en slaat de bewerking over
Terugvalafbeelding van grafiek 4.096 px per zijde Begrensd tot de limiet
LibreOffice-conversieformaat Het extensiedeel vóór de dubbele punt mag niet leeg zijn en mag geen .., NUL, CR of LF bevatten ArgumentException
SPARQL-query SERVICE-clausules zijn niet toegestaan (voorkomt dat de query-engine netwerkverzoeken naar willekeurige eindpunten verstuurt) ArgumentException

Limieten voor streaming readers

Reader Limiet Standaard
ODS XML-tekens 64 MiB
ODS Rijen per werkblad 1,048,576
ODS Kolommen per rij 16,384
ODS Eén repeat-declaratie rijen 1,048,576; kolommen 16,384
ODS Tekst uit één cel 16 MiB
ODT XML-tekens 64 MiB
ODT Teruggegeven tekstknopen 1,000,000
ODT Tekst uit één knoop 16 MiB

Bij overschrijding mislukt het lezen; repeat wordt niet afgekapt om ogenschijnlijk volledige gegevens te leveren. Probeer niet automatisch opnieuw zonder limieten. LeaveOpen is standaard false; bij true sluiten XML-entry en ZIP-reader, maar blijft de buitenste stream van de aanroeper open.

Behoud limieten voor niet-vertrouwde documenten en valideer pakket en schema. Hogere limieten vergroten geheugen- en CPU DoS-risico. MaxXmlCharactersInDocument = 0 schakelt alleen de XML-tekenlimiet uit. Limieten, validatie en opschoning beperken risico maar garanderen geen absolute veiligheid.

ODS- en ODT-readeropties valideren de regels bij toewijzing: de XML-limiet accepteert nul, terwijl limieten voor rijen, kolommen, repeat, knopen en tekst groter dan nul moeten zijn.