目錄 / Table of Contents

Limiti di sicurezza del caricamento e dei lettori streaming

Traduzione informativa: in caso di divergenza prevale la fonte zh-TW.

Il caricamento dei pacchetti e OdsStreamReader/OdtStreamReader elaborano input ZIP/XML non attendibili. I lettori non creano il DOM completo, ma allocano buffer per riga corrente, testo dei nodi, decompressione ZIP e lettore XML. Bassa memoria residente non significa indipendenza dalla dimensione dell’input.

Limiti del pacchetto principale

OdfDocument.Load, le facade Load e OdfPackage.Open condividono i budget di OdfLoadOptions.

Limite Predefinito Protezione
Voci ZIP 5,000 Evita l’esaurimento di CPU e memoria con molte voci piccole
Dimensione decompressa di una voce 500 MiB Limita l’espansione di una voce ZIP
Dimensione decompressa totale 1 GiB Limita l’espansione complessiva del pacchetto
Input grezzo non ricercabile 1 GiB Limita il buffering prima dell’espansione ZIP
Caratteri in un documento XML 64 MiB Limita l’analisi XML e la costruzione del DOM

I quattro limiti ZIP devono essere positivi; zero o valori negativi generano subito ArgumentOutOfRangeException. Solo MaxXmlCharactersInDocument = 0 disattiva il limite XML. Tutti i lettori XML devono vietare DTD e resolver esterni. I nuovi percorsi devono riutilizzare OdfLoadOptions. I percorsi di convalida dei pacchetti e Flat XML (OdfPackageValidator, OdfFlatDocumentValidator e le scansioni delle regole dei profili) applicano anche MaxXmlCharactersInDocument: la convalida dei pacchetti usa package.LoadOptions, mentre quella Flat usa OdfValidationOptions.LoadOptions (il valore predefinito di 64 MiB di OdfLoadOptions se omesso). Firme, marche temporali, dati di revoca dei certificati e risposte di rete esterne hanno limiti propri più piccoli; il limite del pacchetto principale non li sostituisce. Per le regole sul contenuto usare OdfPackageValidator, SanitizeMacros, la verifica delle firme o pwsh eng/Test-OdfPolicy.ps1.

Limiti dei lettori streaming

Lettore Limite Predefinito
ODS Caratteri XML 64 MiB
ODS Righe per foglio 1,048,576
ODS Colonne per riga 16,384
ODS Una dichiarazione repeat righe 1,048,576; colonne 16,384
ODS Testo di una cella 16 MiB
ODT Caratteri XML 64 MiB
ODT Nodi di testo restituiti 1,000,000
ODT Testo di un nodo 16 MiB

Il superamento di un limite causa un errore: repeat non viene troncato restituendo dati apparentemente completi. Non riprovare automaticamente senza limiti. LeaveOpen è false per impostazione predefinita; con true vengono chiusi stream XML e lettore ZIP, ma resta aperto lo stream esterno del chiamante.

Per documenti non attendibili mantenere i limiti e validare pacchetto e schema. Limiti XML o testuali più alti aumentano i rischi di memoria e CPU DoS. MaxXmlCharactersInDocument = 0 disattiva solo il limite dei caratteri XML. Limiti, convalida e sanificazione riducono il rischio senza garantire sicurezza assoluta.

Le opzioni dei lettori ODS e ODT convalidano le regole all’assegnazione: il limite XML accetta zero, mentre i limiti di righe, colonne, repeat, nodi e testo devono essere maggiori di zero.