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

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.