目錄 / Table of Contents

Sikkerhedsgrænser for indlæsning og streaminglæsere

Informativ oversættelse; ved afvigelser gælder den autoritative zh-TW-kilden.

Indlæsning af kernepakken og OdsStreamReader/OdtStreamReader behandler ZIP/XML-input, der ikke er tillid til. Læserne bygger ikke et fuldstændigt DOM, men bruger buffere for den aktuelle række, nodetekst, ZIP-dekomprimering og XML-læseren. Lavt hukommelsesforbrug gør ikke inputstørrelsen irrelevant.

Grænser for kernepakken

OdfDocument.Load, formatspecifikke Load-facader og direkte kald til OdfPackage.Open deler ressourcebudgetterne i OdfLoadOptions.

Grænse Standard Beskyttelsesformål
ZIP-poster 5,000 Forhindrer udtømning af CPU og hukommelse fra mange små poster
Udpakket størrelse af én post 500 MiB Begrænser udvidelsen af én ZIP-post
Samlet udpakket pakkestørrelse 1 GiB Begrænser samlet udvidelse på tværs af poster
Rå størrelse af ikke-søgbart input 1 GiB Begrænser buffering før ZIP-udvidelse
Tegn i ét XML-dokument 64 MiB Begrænser omkostninger til XML-behandling og DOM-opbygning

Antal poster, poststørrelse, samlet udvidelse og rå pakkestørrelse skal være positive. Nul eller negative værdier udløser straks ArgumentOutOfRangeException. Kun MaxXmlCharactersInDocument = 0 slår XML-tegngrænsen fra; negative værdier er stadig ugyldige.

Alle XML-læsere i kernen skal forbyde eksterne DTD'er og resolvere. Nye indlæsningsveje skal genbruge OdfLoadOptions eller tilsvarende dokumenterede budgetter. Valideringsveje for pakker og Flat XML (OdfPackageValidator, OdfFlatDocumentValidator og profilregler) anvender også MaxXmlCharactersInDocument: pakkevalidering bruger package.LoadOptions, mens Flat-validering bruger OdfValidationOptions.LoadOptions (standarden på 64 MiB fra OdfLoadOptions, når den udelades). Signaturer, tidsstempler, certifikatspærringsdata og eksterne netværkssvar har egne mindre grænser; kernepakkens grænse erstatter dem ikke. Grænserne beskytter ressourcer, ikke dokumentindhold; brug OdfPackageValidator, SanitizeMacros, signaturvalidering eller pwsh eng/Test-OdfPolicy.ps1 til politikker.

Øvrige ressource- og outputbeskyttelser

Ud over pakke- og streaming-reader-grænserne beskytter følgende faste grænser også mod ikke-betroet input. Værdierne er i øjeblikket faste konstanter i koden og kan endnu ikke konfigureres via OdfLoadOptions eller et indstillingsobjekt. Vurder konsekvensen for hukommelse og stak, før en grænse hæves eller fjernes.

Område Grænse Adfærd ved overskridelse
Faktisk udpakket størrelse af en ZIP-post Må ikke overstige den ikke-komprimerede størrelse, der er angivet i headeren (MMF-stien ved indlæsning fra filsti) SecurityException
Beskadiget ZIP-centralkatalog eller ZIP64 MMF-hurtigstien understøtter ikke ZIP64, og ingen post, der ikke kan fortolkes fuldt ud, må springes over i stilhed Falder tilbage til validering og læsning via ZipArchive
Indlejringsdybde for XML-elementer 256 niveauer (OdfXmlReader.MaxElementDepth); gælder ved DOM-indlæsning, Flat ODF-indlæsning, validering af profilregler og RDF-fortolkning Indlæsning kaster SecurityException; validering rapporterer ODF0303 eller ODF0301
Indlejringsdybde ved formelfortolkning 256 niveauer hver for parenteser, funktionsargumenter, indlejrede arrays og efterfølgende præfiksoperatorer InvalidOperationException
Samlet antal operatornoder i formler 4.096 (FormulaParser.MaxOperatorNodes); binære, unære, procent- og referenceoperatorer tilsammen. Kædede formler danner venstredybe træer, hvis evaluering og serialisering rekurserer niveau for niveau; grænsen sikrer, at en almindelig trådstak rækker InvalidOperationException
Stakreserve ved formelrekursion Fortolkning, evaluering, hentning af områder og serialisering kontrollerer den resterende stak (RuntimeHelpers.EnsureSufficientExecutionStack), før hvert rekursionsniveau påbegyndes; selv formler tæt på grænserne får ikke processen til at gå ned på tråde med lille stak på 128–256 KB InsufficientExecutionStackException; EvaluateFormulas omdanner den til en formelevalueringsfejl eller #VALUE!
Længde af formlers strengresultat 1.048.576 tegn (&, funktionsresultater, SUBSTITUTE, REPT) Returnerer #VALUE!
Formelfunktioner med et argument som løkkegrænse BINOMDIST kumulativt 100.000; CRITBINOM, HYPGEOMDIST kumulativt 100.000; POISSON kumulativt 1.000.000; DB, DDB, VDB, CUMIPMT perioder 1.000.000 Returnerer #NUM!
Række-/kolonneindeks i regneark Række 1.048.575, kolonne 16.383 (OdfSpreadsheetLimits) ArgumentOutOfRangeException
Tilføjelse af dokument Et dokument må ikke tilføjes til sig selv ArgumentException
Collaboration addColumns Begrænset af antal kolonner og samlet antal celler i OdtOperationSafetyOptions Logger sikkerhedsgrænsen og springer handlingen over
Reservebillede af diagram 4.096 px pr. side Begrænses til grænsen
LibreOffice-konverteringsformat Filtypedelen før kolon må ikke være tom og må ikke indeholde .., NUL, CR eller LF ArgumentException
SPARQL-forespørgsel SERVICE-klausuler er ikke tilladt (forhindrer forespørgselsmotoren i at sende netværksanmodninger til vilkårlige endepunkter) ArgumentException

Grænser for streaminglæsere

Læser Grænse Standard
ODS XML-tegn 64 MiB
ODS Rækker pr. regneark 1,048,576
ODS Kolonner pr. række 16,384
ODS Én repeat-erklæring rækker 1,048,576; kolonner 16,384
ODS Tekst fra én celle 16 MiB
ODT XML-tegn 64 MiB
ODT Returnerede tekstnoder 1,000,000
ODT Tekst fra én node 16 MiB

Læsning mislykkes når en grænse overskrides; repeat afkortes ikke for at returnere tilsyneladende komplette data. Forsøg ikke automatisk igen uden grænser. LeaveOpen er normalt false; med true lukkes XML- strømmen og ZIP-leseren, mens kalderens yderste stream forbliver åben.

Bevar grænserne for dokumenter, der ikke er tillid til og validér pakke og skema. Højere grænser øger hukommelses- og CPU DoS- risiko. MaxXmlCharactersInDocument = 0 slår bare af XML-tegngrensen. Grænser, validering og sanitering reducerer risiko, men garanterer ikke absolut sikkerhed.

ODS- og ODT-læserindstillinger validerer de samme regler, når egenskaber tildeles: XML-grænsen tillader nul, men afviser negative værdier; grænser for rækker, kolonner, repeat, noder og tekst skal være større end nul.