Як запобігти тому, щоб одне зображення з’їло всю пам’ять машини на порталі завантаження OCR?
Завантажений файл має лише кілька мегабайт, але після декодування може знадобитися набагато більше пам’яті, ніж очікувалося. Зображення з високим ступенем стиснення особливо схильні до недійсних оцінок розміру файлу. Портал розпізнавання символів має обмежити розмір завантажених байтів і пікселів, а також пам’ять рівня виконання, час і бюджет паралелізму.
– Перевиконання бюджету не означає, що є проблема з файлом. Необхідно пояснити користувачеві, чи відбувається перевищення в пікселях чи байтах, і надати чіткий процес обробки великих файлів.
Завантажений файл має лише кілька мегабайт, але після декодування він може зайняти набагато більше пам’яті, ніж очікувалося. Зображення з високим ступенем стиснення особливо схильні до недійсності суджень про розмір файлу, тому просто дивитися на розмір файлу є ненадійним.
Ця стаття написана для розробників, відповідальних за портали завантаження, обробку зображень або інтеграцію OCR. Коли ви закінчите читати, ви зрозумієте, чому вам потрібно обмежити як байти, так і пікселі для завантаження, як визначити бюджет, не вимикаючи захист бібліотеки, і чому вам також потрібні обмеження на пам’ять рівня виконання, час і паралелізм.
Значення коду та бюджету в цій статті перевірені за допомогою синтетичних зразків. Вони лише ілюструють ідеї обробки та не є гарантією всіх реальних файлів або ефектів продукту. Перед обробкою важливих документів збережіть оригінали та перегляньте їх відповідно до меж і пунктів прийняття в тексті.
Як запобігти з'їданню входу для завантаження зображень? Висновок одним реченням
Також обмежте розмір завантажуваних байтів і пікселів і встановіть бюджети пам’яті, часу та паралелізму на рівні виконання. Не дивіться лише на розмір файлу та не вимикайте захист, щоб усунути попередження.
| ваша ситуація | Рекомендовані практики | причина |
|---|---|---|
| Визначте, чи є завантаження безпечним лише за розміром файлу | Одночасно обмежте розмір завантажених байтів і пікселів | Файли зображень із високим ступенем стиснення мають малі розміри та можуть займати набагато більше пам’яті, ніж очікувалося, після декодування |
| Подушка підказує попередження про декомпресійну бомбу | Визначте свій бюджет на основі вашого бізнесу та визначте, які попередження мають бути відхилені | Пряме встановлення MAX_IMAGE_PIXELS на None усуне важливу лінію захисту |
| Потрібно обробляти кілька кадрів або одночасних запитів | Збільште кількість кадрів, накопичених пікселів, пам’яті, час і ліміт паралельності | Приклади одного кадру не можуть охопити підсумки кількох кадрів і піки одночасного декодування |
| Юридично великі малюнки перевищують бюджет за замовчуванням | Дотримуйтеся чіткого процесу для великих файлів і повідомляйте користувачам, чи пікселі чи байти перевищують ліміт. | Перевищення ліміту не означає погані файли, користувачі повинні знати, як це зробити |
Не вимикайте захист, щоб усунути попередження
Подушка має механізм захисту підрахунку пікселів від потенційних декомпресійних бомб. Пряме встановлення MAX_IMAGE_PIXELS на None може призвести до зникнення попередження, але це також видаляє важливу лінію захисту. Бюджети мають бути визначені на основі бізнесу, і має бути чітко визначено, які попередження призводять до відхилення.
Перевірка захищеного входу в зарезервовану бібліотеку
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")
Бюджетні значення служать лише для синтетичного тестування. Приклади стосуються окремих кадрів і не охоплюють підсумки кількох кадрів, помилки кодувальника або одночасне декодування. Для офіційного входу також потрібно:
- Обмеження кількості кадрів і сукупних пікселів
- Обробляйте ненадійні файли в ізольованому середовищі виконання
Deny має інші обов'язки, ніж карантин
Верхня межа завантажуваних байтів в основному пов’язана з навантаженням на мережу та сховище, верхня межа односторінкових пікселів пов’язана зі звичайними ризиками великих зображень, обмеження пам’яті та часу обмежують фактичне споживання даних, а верхня межа паралелізму контролює загальне використання ресурсів.
Але кожен тип контролю має сліпі плями: верхня межа байтів не може замінити оцінку масштабу декодування, верхня межа пікселя на одній сторінці не може побачити кумулятивний масштаб кількох кадрів, обмеження пам’яті та часу також вимагають пояснюваного зворотного зв’язку про помилки, а верхня межа паралельності вимагає взаємодії черг і зворотного тиску.
Перевищення бюджету не є синонімом поганих файлів
Юридично великі малюнки також можуть перевищувати бюджет за замовчуванням. Слід дозволити проходити явний процес великих файлів, а не тихо вимикати всі засоби захисту.
Поясніть користувачеві, чи є перевищений ліміт у пікселях чи байтах, щоб він знав, чи слід обрізати сторінку, зменшити роздільну здатність захоплення чи вибрати спеціальний метод обробки.
Портал перекладу повинен заздалегідь зазначити ризики введення.
Додавання власної попередньої перевірки введення перед інтеграцією OmniDoc (Запис продукту) може дозволити непідтримуваним великим зображенням отримувати відгуки раніше. Preflight не може замінити власні обмеження платформи, а також не має робити вигляд, що платформа запровадила політики, наведені в цій статті. Це рівень зрозумілої впевненості, який ви створюєте між завантаженням і доставкою.
Джерела: Інструкції для захисту від декомпресії Image Pillow
📊 Основне порівняння
| КОНТРОЛЬ | Основні обмеження | Потрібне додаткове добавлення |
|---|---|---|
| Обмеження байта завантаження | Навантаження на мережу та зберігання | Шкала декодування |
| Максимальна кількість пікселів на сторінці | Поширені ризики для зображення у великому масштабі | Багатокадровий кумулятивний масштаб |
| Пам'ять і часові обмеження | Фактичне споживання виконання | Пояснюваний зворотний зв'язок з помилкою |
| Паралельний кап | Загальне захоплення ресурсів | Черга та зворотний тиск |
🎯 Який метод тобі підходить?
Якщо ви відповідаєте за завантаження точок входу
Спочатку встановіть подвійні ліміти для байтів і пікселів, потім додайте пам'ять, час і бюджет конкурентності виконавчого шару.
Якщо ви зіткнетеся з попередженням про бомбу для декомпресії Pillow
Не закривайте чек напряму. Спочатку визначайте бізнес-бюджет, а потім вирішуйте, які попередження слід підвищити до відмови.
Якщо потрібно обробляти кілька кадрів або одночасні запити
Доповніть частоту кадрів, накопичену кількість пікселів, пам'ять, час і обмеження паралелізму, а також черги та зворотний тиск.
Якщо ваші користувачі часто завантажують великі інженерні креслення
Продумайте великі робочі процеси для файлів з перевищенням ліміту і повідомляйте користувачам, чи це перевищення пікселів чи байтів.
❓ Поширені запитання (FAQ)
1. Завантаження файлів займає лише кілька мегабайт, тож чому ризик все ще існує?
Декодована пам'ять залежить від розміру зображення; зображення з високою компресією особливо схильні до невдач у оцінці розміру файлу.
2. Чи можу я налаштувати MAX_IMAGE_PIXELS напряму на None?
Не рекомендую. Хоча це могло б усунути попередження, це також усунуло важливу лінію захисту Піллоу.
3. Чи можна використовувати бюджетні значення в прикладі безпосередньо у виробничому середовищі?
Ні. Значення бюджету служить лише для тестування синтезу; формальний вхід вимагає багатокадрових і кумулятивних пікселів, а також обробляє недовірені файли в ізольованому середовищі.
4. Чи варто просто відмовлятися від великих зображень, які виходять за межі вашого бюджету?
Захист не слід тихо вимикати. Юридично великі інженерні креслення можуть слідувати чіткому потоку великих файлів і повідомляти користувачам, чи є обмеження пікселем чи байтом.
📝 Резюме
Безпека порталів для завантаження OCR не може покладатися лише на розмір файлу; вони вимагають спільних обмежень пікселями, байтами та бюджетами рівня виконання. Визначення бюджету при збереженні захисту бібліотеки та чіткого пояснення причин перевищення обмежень користувачам забезпечує стабільність і доступність.
Досвід зараз: завантажте документ, щоб почати переклад, зберігаючи оригінальне форматування


