Bagaimana mencegah satu gambar menghabiskan seluruh memori mesin di portal unggah OCR?

File yang diunggah hanya berukuran beberapa megabyte, tetapi mungkin memerlukan memori yang jauh lebih besar dari yang diharapkan setelah decoding. Gambar dengan kompresibilitas tinggi sangat rentan terhadap penilaian ukuran file yang tidak valid. Portal OCR perlu membatasi ukuran byte dan piksel unggahan, serta memori lapisan eksekusi, waktu, dan anggaran konkurensi.

File yang diunggah hanya berukuran beberapa megabyte, namun setelah didekode, file tersebut mungkin menggunakan lebih banyak memori daripada yang diperkirakan. Gambar dengan kompresibilitas tinggi sangat rentan terhadap penilaian ukuran file yang tidak valid, jadi hanya dengan melihat ukuran file saja tidak dapat diandalkan.

Artikel ini ditulis untuk pengembang yang bertanggung jawab atas portal unggahan, pemrosesan gambar, atau integrasi OCR. Setelah selesai membaca, Anda akan memahami mengapa Anda perlu membatasi byte dan piksel unggahan, cara menentukan anggaran tanpa mematikan perlindungan perpustakaan, dan mengapa Anda juga memerlukan memori lapisan eksekusi, waktu, dan batas konkurensi.

Kode dan nilai anggaran dalam artikel ini diverifikasi menggunakan sampel sintetis. Mereka hanya mengilustrasikan ide pemrosesan dan tidak mewakili jaminan semua file nyata atau efek produk. Sebelum memproses dokumen penting, harap simpan dokumen asli dan tinjau sesuai dengan batasan dan item penerimaan dalam teks.

Bagaimana cara mencegah pintu masuk unggahan gambar dimakan? Kesimpulan satu kalimat

Batasi juga ukuran byte dan piksel yang diunggah, serta tetapkan anggaran memori, waktu, dan konkurensi pada lapisan eksekusi. Jangan hanya melihat ukuran file, dan jangan mematikan proteksi untuk menghilangkan peringatan.

situasi AndaPraktik yang direkomendasikanalasan
Tentukan apakah pengunggahan aman berdasarkan ukuran file sajaBatasi ukuran byte dan piksel yang diunggah secara bersamaanFile gambar dengan kompresi tinggi berukuran kecil dan mungkin masih menggunakan lebih banyak memori daripada yang diharapkan setelah decoding
Bantal memicu peringatan bom dekompresiTentukan anggaran Anda berdasarkan bisnis Anda dan identifikasi peringatan mana yang harus ditingkatkan menjadi penolakanMenyetel MAX_IMAGE_PIXELS ke None secara langsung akan menghilangkan garis pertahanan penting
Perlu menangani banyak frame atau permintaan bersamaanTingkatkan jumlah frame, akumulasi piksel, memori, waktu dan batas konkurensiContoh bingkai tunggal tidak dapat mencakup total multibingkai dan puncak penguraian kode secara bersamaan
Gambar besar yang sah melebihi anggaran standarIkuti proses yang jelas untuk file besar dan beri tahu pengguna apakah piksel atau byte melebihi batas.Melebihi batas bukan berarti file buruk, pengguna perlu tahu cara menyesuaikannya

Jangan matikan perlindungan untuk menghilangkan peringatan

Pillow memiliki mekanisme perlindungan jumlah piksel terhadap potensi bom dekompresi. Menyetel MAX_IMAGE_PIXELS ke None secara langsung dapat menghilangkan peringatan tersebut, namun juga menghilangkan garis pertahanan yang penting. Anggaran harus ditentukan berdasarkan bisnisnya dan harus jelas peringatan mana yang dipromosikan hingga penolakan.

Pemeriksaan entri yang dilindungi perpustakaan khusus

from io import BytesIO
import warnings
from PIL import Image

def inspect(raw, max_bytes=4096, max_pixels=1000):
    if len(raw) > max_bytes:
        raise ValueError("upload byte budget")
    with warnings.catch_warnings():
        warnings.simplefilter("error", Image.DecompressionBombWarning)
        with Image.open(BytesIO(raw)) as im:
            if im.width * im.height > max_pixels:
                raise ValueError("pixel budget")
            im.load()
            return im.size

stream = BytesIO()
Image.new("RGB", (40, 30), "white").save(stream, format="PNG")
raw = stream.getvalue()
assert len(raw) < 4096
assert inspect(raw, max_pixels=1200) == (40, 30)
try:
    inspect(raw, max_pixels=1000)
except ValueError as exc:
    assert "pixel" in str(exc)
else:
    raise AssertionError("pixel budget not enforced")

Nilai anggaran hanya melayani pengujian sintetis. Contoh-contoh ini berhubungan dengan frame tunggal dan tidak mencakup total multi-frame, bug encoder, atau lonjakan decoding secara bersamaan. Pintu masuk formal juga membutuhkan:

  • Nomor bingkai dan batas piksel kumulatif
  • Tangani file yang tidak tepercaya dalam lingkungan eksekusi yang terisolasi

Deny memiliki tanggung jawab yang berbeda dengan karantina

Batas atas byte yang diunggah terutama berkaitan dengan beban jaringan dan penyimpanan, batas atas piksel satu halaman berkaitan dengan risiko umum gambar besar, batas memori dan waktu membatasi konsumsi eksekusi aktual, dan batas atas konkurensi mengontrol total penggunaan sumber daya.

Tetapi setiap jenis kontrol memiliki titik buta: batas atas byte tidak dapat menggantikan penilaian skala decoding, batas atas piksel satu halaman tidak dapat melihat skala kumulatif dari beberapa frame, batas memori dan waktu juga memerlukan umpan balik kesalahan yang dapat dijelaskan, dan batas atas konkurensi memerlukan kerja sama antrian dan tekanan balik.

Anggaran yang berlebihan tidak sama dengan file yang buruk

Gambar berukuran besar secara hukum mungkin juga melebihi anggaran default. Itu harus dibiarkan melalui proses eksplisit pada file besar, daripada mematikan semua perlindungan secara diam-diam.

Jelaskan kepada pengguna apakah batas yang terlampaui adalah piksel atau byte, sehingga mereka tahu apakah mereka harus memotong halaman, mengurangi resolusi pengambilan, atau memilih metode pemrosesan khusus.

Portal terjemahan harus menyatakan risiko masukan terlebih dahulu.

Menambahkan pemeriksaan awal masukan Anda sendiri sebelum integrasi OmniDoc (portal produk) dapat memungkinkan gambar besar yang tidak didukung menerima masukan lebih awal. Preflight tidak dapat menggantikan batasan platform itu sendiri, dan juga tidak boleh berpura-pura bahwa platform telah menerapkan kebijakan dalam artikel ini. Ini adalah lapisan jaminan yang dapat dijelaskan yang Anda buat antara pengunggahan dan pengiriman.

Referensi: Instruksi dekompresi dan perlindungan Gambar Bantal

📊 Perbandingan inti

kontrolBatasan utamaMasih perlu menambahkan
Batas byte unggahanBeban jaringan dan penyimpananskala penguraian kode
Piksel maksimum per halamanRisiko Gambaran Besar yang UmumSkala kumulatif dari beberapa frame
Batasan memori dan waktuKonsumsi eksekusi aktualUmpan balik kesalahan yang dapat dijelaskan
Batas konkurensiTotal penggunaan sumber dayaAntrian dan tekanan balik

🎯 Metode mana yang cocok untuk Anda?

Jika Anda bertanggung jawab untuk mengunggah pintu masuk

Pertama buat batas ganda byte dan piksel, lalu tambahkan memori, waktu, dan anggaran konkurensi lapisan eksekusi.

Jika Anda menemukan peringatan bom dekompresi Bantal

Jangan hanya mematikan cek. Tentukan anggaran bisnis Anda sebelum memutuskan peringatan mana yang akan ditingkatkan menjadi penolakan.

Jika Anda perlu menangani beberapa frame atau permintaan bersamaan

Lengkapi jumlah frame, akumulasi piksel, memori, waktu dan batas atas konkurensi, dan bekerja sama dengan antrian dan tekanan balik.

Jika pengguna Anda sering mengunggah gambar teknik berukuran besar

Rancang proses file besar yang jelas untuk file yang melebihi batas, dan beri tahu pengguna apakah batas tersebut terlampaui dalam piksel atau byte.

❓ Pertanyaan yang Sering Diajukan (FAQ)

1. File yang diupload hanya beberapa megabyte, kenapa masih ada resiko?

Memori yang didekodekan bergantung pada ukuran gambar, dan gambar dengan kompresibilitas tinggi sangat rentan terhadap penilaian ukuran file yang tidak valid.

2. Bisakah MAX_IMAGE_PIXELS langsung disetel ke Tidak Ada?

Tidak direkomendasikan. Meskipun hal ini menghilangkan peringatan tersebut, hal ini juga menghilangkan garis pertahanan penting bagi Pillow.

3. Apakah nilai anggaran pada contoh dapat langsung digunakan dalam lingkungan produksi?

tidak bisa. Nilai anggaran hanya melayani pengujian sintetis, entri formal juga memerlukan banyak bingkai dan batas piksel kumulatif, serta menangani file yang tidak tepercaya dalam lingkungan yang terisolasi.

4. Apakah gambar berukuran besar yang melebihi budget harus langsung ditolak?

Perlindungan tidak boleh dimatikan secara diam-diam. Gambar teknik skala besar yang sah dapat mengikuti proses file besar yang jelas dan memberi tahu pengguna apakah piksel atau byte melebihi batas.

📝 Ringkasan

Keamanan portal unggahan OCR tidak hanya bergantung pada ukuran file, namun juga perlu dibatasi oleh piksel, byte, dan anggaran lapisan eksekusi. Hanya dengan menentukan anggaran sambil mempertahankan perlindungan perpustakaan dan menjelaskan dengan jelas alasan melebihi batas kepada pengguna, stabilitas dan ketersediaan dapat dipertimbangkan.

Coba sekarang: Unggah dokumen untuk memulai penerjemahan, dengan tetap mempertahankan tata letak aslinya

Diperbarui 2026-11-14