目錄 / Table of Contents

Had keselamatan pemuatan dan pembaca penstriman

Terjemahan maklumat; jika terdapat perbezaan, sumber zh-TW yang berwibawa mengatasi terjemahan.

Pemuatan pakej dan OdsStreamReader/OdtStreamReader memproses input ZIP/XML yang tidak dipercayai. Pembaca tidak membina DOM dokumen penuh, tetapi memperuntukkan penimbal untuk baris semasa, teks nod, penyahmampatan ZIP dan pembaca XML. Reka bentuk memori rendah tidak menghapuskan kesan saiz input.

Had pakej teras

OdfDocument.Load, facade Load mengikut format dan OdfPackage.Open berkongsi belanjawan sumber OdfLoadOptions.

Had Lalai Tujuan perlindungan
Entri ZIP 5,000 Mencegah kehabisan CPU dan memori akibat banyak entri kecil
Saiz nyahmampat satu entri 500 MiB Mengehadkan pengembangan satu entri ZIP
Jumlah saiz nyahmampat 1 GiB Mengehadkan jumlah pengembangan pakej
Saiz input mentah tidak boleh dicari 1 GiB Mengehadkan penimbalan sebelum pengembangan ZIP
Aksara dalam satu dokumen XML 64 MiB Mengehadkan kos penghuraian XML dan pembinaan DOM

Empat had ZIP mesti positif; sifar atau nilai negatif segera menghasilkan ArgumentOutOfRangeException. Hanya MaxXmlCharactersInDocument = 0 mematikan had XML. Semua XML Reader mesti melarang DTD dan resolver luaran. Laluan baharu mesti menggunakan OdfLoadOptions. Laluan pengesahan pakej dan Flat XML (OdfPackageValidator, OdfFlatDocumentValidator serta imbasan peraturan profile) turut menggunakan MaxXmlCharactersInDocument: pengesahan pakej menggunakan package.LoadOptions, manakala pengesahan Flat menggunakan OdfValidationOptions.LoadOptions (lalai 64 MiB daripada OdfLoadOptions jika tidak ditetapkan). Tandatangan, cap masa, data pembatalan sijil dan respons rangkaian luaran mempunyai had tersendiri yang lebih kecil; had pakej teras tidak menggantikannya. Untuk dasar kandungan gunakan OdfPackageValidator, SanitizeMacros, pengesahan tandatangan atau pwsh eng/Test-OdfPolicy.ps1.

Perlindungan sumber dan output yang lain

Selain had pakej dan pembaca penstriman, had tetap berikut turut melindungi daripada input yang tidak dipercayai. Nilai ini pada masa ini ialah pemalar tetap dalam kod dan belum boleh dikonfigurasikan melalui OdfLoadOptions atau objek pilihan. Nilaikan kesan pada memori dan tindanan sebelum menaikkan atau membuang sesuatu had.

Aspek Had Tingkah laku apabila melebihi
Saiz sebenar entri ZIP selepas dinyahmampat Tidak boleh melebihi saiz tidak dimampatkan yang diisytiharkan dalam pengepala (laluan MMF bagi pemuatan melalui laluan fail) SecurityException
Direktori pusat ZIP rosak atau ZIP64 Laluan pantas MMF tidak menyokong ZIP64, dan mana-mana rekod yang tidak dapat dihuraikan sepenuhnya tidak boleh dilangkau secara senyap Kembali kepada pengesahan dan bacaan melalui ZipArchive
Kedalaman sarang elemen XML 256 peringkat (OdfXmlReader.MaxElementDepth); terpakai pada pemuatan DOM, pemuatan Flat ODF, pengesahan peraturan profil dan penghuraian RDF Pemuatan melontar SecurityException; pengesahan melaporkan ODF0303 atau ODF0301
Kedalaman sarang penghuraian formula Masing-masing 256 peringkat untuk kurungan, argumen fungsi, tatasusunan sebaris dan operator awalan berturutan InvalidOperationException
Jumlah nod operator formula 4,096 (FormulaParser.MaxOperatorNodes); operator binari, unari, peratus dan rujukan digabungkan. Formula berantai membentuk pokok dalam ke kiri yang penilaian dan pensirian sirinya berulang peringkat demi peringkat; had ini memastikan tindanan benang biasa mencukupi InvalidOperationException
Ruang tindanan untuk rekursi formula Penghuraian, penilaian, pendapatan julat dan pensirian memeriksa tindanan yang berbaki (RuntimeHelpers.EnsureSufficientExecutionStack) sebelum memasuki setiap peringkat rekursi; walaupun formula hampir had tidak menyebabkan proses ranap pada benang bertindanan kecil 128–256 KB InsufficientExecutionStackException; EvaluateFormulas menukarnya kepada pengecualian penilaian formula atau #VALUE!
Panjang hasil rentetan formula 1,048,576 aksara (&, hasil fungsi, SUBSTITUTE, REPT) Memulangkan #VALUE!
Fungsi formula yang had gelungnya ialah argumen BINOMDIST kumulatif 100,000; CRITBINOM, HYPGEOMDIST kumulatif 100,000; POISSON kumulatif 1,000,000; DB, DDB, VDB, CUMIPMT tempoh 1,000,000 Memulangkan #NUM!
Indeks baris/lajur hamparan Baris 1,048,575, lajur 16,383 (OdfSpreadsheetLimits) ArgumentOutOfRangeException
Penambahan dokumen Dokumen tidak boleh ditambah kepada dirinya sendiri ArgumentException
Collaboration addColumns Dihadkan oleh bilangan lajur dan jumlah sel dalam OdtOperationSafetyOptions Merekodkan had keselamatan dan melangkau operasi itu
Imej sandaran carta 4,096 px setiap sisi Dihadkan kepada had
Format penukaran LibreOffice Bahagian sambungan sebelum tanda titik bertindih tidak boleh kosong dan tidak boleh mengandungi .., NUL, CR atau LF ArgumentException
Pertanyaan SPARQL Klausa SERVICE tidak dibenarkan (menghalang enjin pertanyaan menghantar permintaan rangkaian ke titik akhir sewenang-wenangnya) ArgumentException

Had pembaca penstriman

Pembaca Had Lalai
ODS Aksara XML 64 MiB
ODS Baris setiap lembaran 1,048,576
ODS Lajur setiap baris 16,384
ODS Satu pengisytiharan repeat baris 1,048,576; lajur 16,384
ODS Teks satu sel 16 MiB
ODT Aksara XML 64 MiB
ODT Nod teks yang dikembalikan 1,000,000
ODT Teks satu nod 16 MiB

Pembacaan gagal apabila had dilepasi; repeat tidak dipotong untuk mengembalikan data yang kelihatan lengkap. Jangan cuba semula secara automatik tanpa had. LeaveOpen lalai kepada false; apabila true, strim entri XML dan pembaca ZIP ditutup tetapi strim terluar pemanggil kekal terbuka.

Kekalkan had bagi dokumen tidak dipercayai serta sahkan pakej dan skema. Had yang lebih tinggi meningkatkan risiko memori dan CPU DoS. MaxXmlCharactersInDocument = 0 hanya mematikan had aksara XML. Had, pengesahan dan sanitasi mengurangkan risiko tetapi tidak menjamin keselamatan mutlak.

Options Reader ODS dan ODT mengesahkan peraturan semasa sifat ditetapkan: had XML menerima sifar, manakala had baris, lajur, repeat, nod dan teks mesti melebihi sifar.