目錄 / 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.

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.