目錄 / Table of Contents

Límites de seguridad de carga y lectores en flujo

Traducción informativa; en caso de discrepancia, prevalece la fuente en chino tradicional (zh-TW).

La carga de paquetes y OdsStreamReader/OdtStreamReader procesan entradas ZIP/XML no confiables. Los lectores no crean el DOM completo del documento, pero asignan búferes para la fila actual, el texto de los nodos, la descompresión ZIP y el XML Reader. Un diseño de baja residencia no elimina los efectos del tamaño de la entrada.

Límites del paquete principal

OdfDocument.Load, las fachadas Load y OdfPackage.Open comparten los presupuestos de OdfLoadOptions.

Límite Valor predeterminado Protección
Entradas ZIP 5,000 Evita agotar CPU y memoria con muchas entradas pequeñas
Tamaño descomprimido de una entrada 500 MiB Limita la expansión de una entrada ZIP
Tamaño descomprimido total 1 GiB Limita la expansión total del paquete
Entrada no buscable sin procesar 1 GiB Limita el búfer antes de expandir ZIP
Caracteres de un documento XML 64 MiB Limita el análisis XML y la creación del DOM

Los cuatro límites ZIP deben ser positivos; cero o valores negativos producen inmediatamente ArgumentOutOfRangeException. Solo MaxXmlCharactersInDocument = 0 desactiva el límite XML. Todos los XML Reader deben prohibir DTD y resolvers externos. Las rutas nuevas deben reutilizar OdfLoadOptions. Las rutas de validación de paquetes y Flat XML (OdfPackageValidator, OdfFlatDocumentValidator y el análisis de reglas de perfil) también aplican MaxXmlCharactersInDocument: la validación de paquetes usa package.LoadOptions y la validación Flat usa OdfValidationOptions.LoadOptions (el valor predeterminado de 64 MiB de OdfLoadOptions si se omite). Las firmas, las marcas de tiempo, los datos de revocación de certificados y las respuestas de red externas tienen límites propios más pequeños; el límite del paquete principal no los sustituye. Para políticas de contenido use OdfPackageValidator, SanitizeMacros, la validación de firmas o pwsh eng/Test-OdfPolicy.ps1.

Límites de lectores en flujo

Reader Límite Valor predeterminado
ODS Caracteres XML 64 MiB
ODS Filas por hoja de cálculo 1,048,576
ODS Columnas por fila 16,384
ODS Una declaración repeat 1,048,576 filas; 16,384 columnas
ODS Texto extraído de una celda 16 MiB
ODT Caracteres XML 64 MiB
ODT Nodos de texto devueltos 1,000,000
ODT Texto extraído de un nodo 16 MiB

La lectura falla cuando se supera un límite; no se trunca repeat para seguir devolviendo datos que parezcan completos. Trate estos fallos como resultados de la protección de recursos y no vuelva a intentarlo automáticamente con límites desactivados.

Propiedad de los flujos

El valor predeterminado de LeaveOpen en las opciones es false. Cuando se establece en true, al desechar el Reader se cierran el flujo de la entrada XML y el ZIP Reader, pero se mantiene abierto el flujo exterior proporcionado por el autor de la llamada.

Límite de confianza

Mantenga los límites predeterminados para documentos que no sean de confianza y ejecute primero la validación de package y schema. Puede aumentar límites concretos para documentos grandes que sean de confianza y deban procesarse, pero al aumentar los límites de XML o texto también aumenta el riesgo de ataques de denegación de servicio contra la memoria y de ataques CPU DoS. MaxXmlCharactersInDocument = 0 solo desactiva el límite de caracteres XML; los demás límites del Reader continúan vigentes.

Las opciones de los Reader ODS y ODT validan al asignar propiedades: el límite XML admite cero, pero los límites de filas, columnas, repeat, nodos y texto deben ser mayores que cero.

Los límites de seguridad, la validación y el saneamiento reducen el riesgo, pero no garantizan una seguridad absoluta frente a documentos maliciosos.