目錄 / Table of Contents

Bezpečnostné limity načítania a streamovacích čítačiek

Informatívny preklad; pri rozdiele má prednosť autoritatívny zdroj zh-TW.

Načítanie balíka a OdsStreamReader/OdtStreamReader spracúvajú nedôveryhodný vstup ZIP/XML. Čítačky nevytvárajú úplný DOM dokumentu, ale prideľujú vyrovnávacie pamäte pre aktuálny riadok, text uzlov, dekompresiu ZIP a čítačku XML. Nízka rezidentná pamäť neodstraňuje vplyv veľkosti vstupu.

Limity základného balíka

OdfDocument.Load, fasády Load jednotlivých formátov a OdfPackage.Open zdieľajú rozpočty OdfLoadOptions.

Limit Predvolená hodnota Účel ochrany
Položky ZIP 5,000 Bráni vyčerpaniu CPU a pamäte mnohými malými položkami
Rozbalená veľkosť jednej položky 500 MiB Obmedzuje rozbalenie jednej položky ZIP
Celková rozbalená veľkosť 1 GiB Obmedzuje celkové rozbalenie balíka
Veľkosť neskenovateľného vstupu 1 GiB Obmedzuje vyrovnávaciu pamäť pred rozbalením ZIP
Znaky v jednom dokumente XML 64 MiB Obmedzuje spracovanie XML a vytvorenie DOM

Štyri limity ZIP musia byť kladné; nula alebo záporné hodnoty okamžite vyvolajú ArgumentOutOfRangeException. Iba MaxXmlCharactersInDocument = 0 vypne limit XML. Všetky XML čítačky musia zakázať externé DTD a resolvery. Nové cesty musia použiť OdfLoadOptions. Validačné cesty balíkov a Flat XML (OdfPackageValidator, OdfFlatDocumentValidator a kontroly pravidiel profilov) tiež používajú MaxXmlCharactersInDocument: validácia balíka používa package.LoadOptions, zatiaľ čo validácia Flat používa OdfValidationOptions.LoadOptions (pri vynechaní predvolených 64 MiB z OdfLoadOptions). Podpisy, časové pečiatky, údaje o zrušení certifikátov a externé sieťové odpovede majú vlastné menšie limity; limit základného balíka ich nenahrádza. Pre zásady obsahu použite OdfPackageValidator, SanitizeMacros, overenie podpisu alebo pwsh eng/Test-OdfPolicy.ps1.

Ďalšie ochrany zdrojov a výstupu

Okrem limitov balíka a streamovaných readerov chránia pred nedôveryhodným vstupom aj nasledujúce pevné limity. Tieto hodnoty sú zatiaľ pevné konštanty v kóde a nedajú sa nastaviť cez OdfLoadOptions ani objekt volieb. Pred zvýšením alebo odstránením limitu posúďte vplyv na pamäť a zásobník.

Oblasť Limit Správanie pri prekročení
Skutočná dekomprimovaná veľkosť položky ZIP Nesmie prekročiť nekomprimovanú veľkosť deklarovanú v hlavičke (cesta MMF pri načítaní zo súboru) SecurityException
Poškodený centrálny adresár ZIP alebo ZIP64 Rýchla cesta MMF nepodporuje ZIP64 a žiadny záznam, ktorý sa nedá úplne spracovať, sa nesmie ticho preskočiť Prechod na overenie a čítanie cez ZipArchive
Hĺbka vnorenia elementov XML 256 úrovní (OdfXmlReader.MaxElementDepth); platí pre načítanie DOM, načítanie Flat ODF, overovanie pravidiel profilu a spracovanie RDF Načítanie vyvolá SecurityException; overenie hlási ODF0303 alebo ODF0301
Hĺbka vnorenia pri spracovaní vzorcov Po 256 úrovní pre zátvorky, argumenty funkcií, vložené polia a po sebe idúce prefixové operátory InvalidOperationException
Celkový počet uzlov operátorov vo vzorci 4 096 (FormulaParser.MaxOperatorNodes); spolu binárne, unárne, percentuálne a referenčné operátory. Reťazené vzorce tvoria ľavostranne hlboké stromy, ktorých vyhodnotenie a serializácia rekurzívne postupujú úroveň po úrovni; tento limit zaisťuje, že postačuje bežný zásobník vlákna InvalidOperationException
Rezerva zásobníka pri rekurzii vzorcov Spracovanie, vyhodnotenie, získanie rozsahov a serializácia pred vstupom do každej úrovne rekurzie kontrolujú zostávajúci zásobník (RuntimeHelpers.EnsureSufficientExecutionStack); ani vzorce blízke limitom nezhodia proces na vláknach s malým zásobníkom 128–256 KB InsufficientExecutionStackException; EvaluateFormulas ju prevedie na výnimku vyhodnotenia vzorca alebo #VALUE!
Dĺžka reťazcového výsledku vzorca 1 048 576 znakov (&, výsledky funkcií, SUBSTITUTE, REPT) Vracia #VALUE!
Funkcie vzorcov s hranicou cyklu určenou argumentom BINOMDIST kumulatívne 100 000; CRITBINOM, HYPGEOMDIST kumulatívne 100 000; POISSON kumulatívne 1 000 000; DB, DDB, VDB, CUMIPMT obdobia 1 000 000 Vracia #NUM!
Index riadka/stĺpca tabuľky Riadok 1 048 575, stĺpec 16 383 (OdfSpreadsheetLimits) ArgumentOutOfRangeException
Pripojenie dokumentu Dokument nemožno pripojiť sám k sebe ArgumentException
Collaboration addColumns Obmedzené počtom stĺpcov a celkovým počtom buniek v OdtOperationSafetyOptions Zaznamená bezpečnostný limit a operáciu preskočí
Záložný obrázok grafu 4 096 px na stranu Obmedzené na limit
Formát konverzie LibreOffice Časť prípony pred dvojbodkou nesmie byť prázdna a nesmie obsahovať .., NUL, CR ani LF ArgumentException
Dopyt SPARQL Klauzuly SERVICE nie sú povolené (bráni dopytovému enginu odosielať sieťové požiadavky na ľubovoľné koncové body) ArgumentException

Limity streamovacích čítačiek

Čítačka Limit Predvolená hodnota
ODS Znaky XML 64 MiB
ODS Riadky na hárok 1,048,576
ODS Stĺpce na riadok 16,384
ODS Jedna deklarácia repeat riadky 1,048,576; stĺpce 16,384
ODS Text jednej bunky 16 MiB
ODT Znaky XML 64 MiB
ODT Vrátené textové uzly 1,000,000
ODT Text jedného uzla 16 MiB

Po prekročení limitu čítanie zlyhá; repeat sa neskráti tak, aby vrátil zdanlivo úplné údaje. Neopakujte automaticky pokus bez limitov. LeaveOpen má predvolenú hodnotu false; pri true sa zatvorí prúd položky XML a čítačka ZIP, ale vonkajší prúd volajúceho zostane otvorený.

Pre nedôveryhodné dokumenty ponechajte limity a overte balík aj schému. Vyššie limity zvyšujú riziko pamäte a CPU DoS. MaxXmlCharactersInDocument = 0 vypína iba limit znakov XML. Limity, validácia a sanitizácia znižujú riziko, ale nezaručujú absolútnu bezpečnosť.

Možnosti čítačiek ODS a ODT overujú pravidlá pri priradení vlastností: limit XML povoľuje nulu, ale limity riadkov, stĺpcov, repeat, uzlov a textu musia byť väčšie než nula.