Sikkerhetsgrenser for lasting og strømlesere
Informativ oversettelse; ved avvik gjelder den autoritative zh-TW-kilden.
Pakkelasting og OdsStreamReader/OdtStreamReader behandler ikke-klarert ZIP/XML-inndata. Leserne bygger ikke et fullstendig DOM, men bruker buffere for gjeldende rad,
nodetekst, ZIP-dekomprimering og XML-leseren. Lavt minnebruk gjør ikke inndatastørrelsen irrelevant.
Grenser for kjernepakken
OdfDocument.Load, formatspesifikke Load-fasader og OdfPackage.Open deler ressursbudsjettene i OdfLoadOptions.
| Grense | Standard | Beskyttelsesformål |
|---|---|---|
| ZIP-oppføringer | 5,000 | Hindrer uttømming av CPU og minne fra mange små oppføringer |
| Ukomprimert størrelse for én oppføring | 500 MiB | Begrenser utvidelsen av én ZIP-oppføring |
| Samlet ukomprimert størrelse | 1 GiB | Begrenser total utvidelse av pakken |
| Rå størrelse på ikke-søkbare inndata | 1 GiB | Begrenser bufring før ZIP-utvidelse |
| Tegn i ett XML-dokument | 64 MiB | Begrenser XML-behandling og DOM-bygging |
De fire ZIP-grensene må være positive; null eller negative verdier gir umiddelbart ArgumentOutOfRangeException. Bare MaxXmlCharactersInDocument = 0 slår av XML-grensen. Alle XML-lesere må forby eksterne DTD-er og resolvere. Nye lastebaner må bruke OdfLoadOptions. Valideringsbaner for pakker og Flat XML (OdfPackageValidator, OdfFlatDocumentValidator og skanning av profilregler) bruker også MaxXmlCharactersInDocument: pakkevalidering bruker package.LoadOptions, mens Flat-validering bruker OdfValidationOptions.LoadOptions (standardverdien 64 MiB fra OdfLoadOptions når den utelates). Signaturer, tidsstempler, sertifikatopphevingsdata og eksterne nettverkssvar har egne mindre grenser; grensen for kjernepakken erstatter dem ikke. Bruk OdfPackageValidator, SanitizeMacros, signaturvalidering eller pwsh eng/Test-OdfPolicy.ps1 for innholdspolicy.
Andre ressurs- og utdatabeskyttelser
I tillegg til grensene for pakke og strømmende lesere beskytter også følgende faste grenser mot ikke-klarert inndata. Verdiene er foreløpig faste konstanter i koden og kan ennå ikke settes via OdfLoadOptions eller et alternativobjekt. Vurder konsekvensene for minne og stakk før en grense økes eller fjernes.
| Område | Grense | Oppførsel ved overskridelse |
|---|---|---|
| Faktisk utpakket størrelse for en ZIP-oppføring | Må ikke overskride den ukomprimerte størrelsen som er oppgitt i headeren (MMF-stien ved innlasting fra filsti) | SecurityException |
| Skadet ZIP-sentralkatalog eller ZIP64 | MMF-hurtigstien støtter ikke ZIP64, og ingen post som ikke kan tolkes fullstendig, må hoppes over i stillhet | Faller tilbake til validering og lesing via ZipArchive |
| Nestingsdybde for XML-elementer | 256 nivåer (OdfXmlReader.MaxElementDepth); gjelder DOM-innlasting, Flat ODF-innlasting, validering av profilregler og RDF-tolking |
Innlasting kaster SecurityException; validering rapporterer ODF0303 eller ODF0301 |
| Nestingsdybde ved formeltolking | 256 nivåer hver for parenteser, funksjonsargumenter, innebygde matriser og påfølgende prefiksoperatorer | InvalidOperationException |
| Totalt antall operatornoder i en formel | 4 096 (FormulaParser.MaxOperatorNodes); binære, unære, prosent- og referanseoperatorer til sammen. Lenkede formler danner venstredype trær der evaluering og serialisering rekurserer nivå for nivå; grensen sikrer at en vanlig trådstakk rekker |
InvalidOperationException |
| Stakkreserve ved formelrekursjon | Tolking, evaluering, henting av områder og serialisering kontrollerer gjenværende stakk (RuntimeHelpers.EnsureSufficientExecutionStack) før hvert rekursjonsnivå; selv formler nær grensene får ikke prosessen til å krasje på tråder med liten stakk på 128–256 KB |
InsufficientExecutionStackException; EvaluateFormulas gjør den om til et formelevalueringsunntak eller #VALUE! |
| Lengde på formelens strengresultat | 1 048 576 tegn (&, funksjonsresultater, SUBSTITUTE, REPT) |
Returnerer #VALUE! |
| Formelfunksjoner med et argument som løkkegrense | BINOMDIST kumulativt 100 000; CRITBINOM, HYPGEOMDIST kumulativt 100 000; POISSON kumulativt 1 000 000; DB, DDB, VDB, CUMIPMT perioder 1 000 000 |
Returnerer #NUM! |
| Rad-/kolonneindeks i regneark | Rad 1 048 575, kolonne 16 383 (OdfSpreadsheetLimits) |
ArgumentOutOfRangeException |
| Tillegging av dokument | Et dokument kan ikke legges til seg selv | ArgumentException |
Collaboration addColumns |
Begrenset av antall kolonner og totalt antall celler i OdtOperationSafetyOptions |
Logger sikkerhetsgrensen og hopper over operasjonen |
| Reservebilde for diagram | 4 096 px per side | Begrenses til grensen |
| LibreOffice-konverteringsformat | Filendelsesdelen før kolon kan ikke være tom og kan ikke inneholde .., NUL, CR eller LF |
ArgumentException |
| SPARQL-spørring | SERVICE-klausuler er ikke tillatt (hindrer spørringsmotoren i å sende nettverksforespørsler til vilkårlige endepunkter) |
ArgumentException |
Grenser for strømlesere
| Leser | Grense | Standard |
|---|---|---|
| ODS | XML-tegn | 64 MiB |
| ODS | Rader per ark | 1,048,576 |
| ODS | Kolonner per rad | 16,384 |
| ODS | Én repeat-erklæring | rader 1,048,576; kolonner 16,384 |
| ODS | Tekst fra én celle | 16 MiB |
| ODT | XML-tegn | 64 MiB |
| ODT | Returnerte tekstnoder | 1,000,000 |
| ODT | Tekst fra én node | 16 MiB |
Lesing mislykkes når en grense overskrides; repeat avkortes ikke for å returnere tilsynelatende komplette
data. Ikke prøv automatisk på nytt uten grenser. LeaveOpen er normalt false; med true lukkes XML-
strømmen og ZIP-leseren, mens innringerens ytterste strøm forblir åpen.
Behold grensene for ukjente dokumenter og valider pakke og skjema. Høyere grenser øker minne- og CPU DoS-
risiko. MaxXmlCharactersInDocument = 0 slår bare av XML-tegngrensen. Grenser, validering og sanitering
reduserer risiko, men garanterer ikke absolutt sikkerhet.
ODS- og ODT-leserinnstillinger validerer reglene når egenskaper tilordnes: XML-grensen tillater null, mens grenser for rader, kolonner, repeat, noder og tekst må være større enn null.