Jak zapobiec pochłonięciu przez jedno zdjęcie całej pamięci komputera w portalu przesyłania OCR?

Przesłany plik ma tylko kilka megabajtów, ale po zdekodowaniu może wymagać znacznie więcej pamięci, niż oczekiwano. Obrazy o wysokim stopniu kompresji są szczególnie podatne na nieprawidłowe oceny rozmiaru pliku. Portal OCR musi ograniczać zarówno przesyłany rozmiar bajtu i piksela, jak i pamięć warstwy wykonawczej, czas i budżet współbieżności.

Przesłany plik ma zaledwie kilka megabajtów, ale po zdekodowaniu może zajmować znacznie więcej pamięci, niż oczekiwano. Obrazy o wysokim stopniu kompresji są szczególnie podatne na unieważnianie oceny rozmiaru pliku, więc samo patrzenie na rozmiar pliku nie jest wiarygodne.

Ten artykuł jest napisany dla programistów odpowiedzialnych za portale do przesyłania, przetwarzanie obrazów lub integrację OCR. Zanim skończysz czytać, zrozumiesz, dlaczego musisz ograniczyć zarówno przesyłane bajty, jak i piksele, jak zdefiniować budżet bez wyłączania ochrony bibliotek i dlaczego potrzebujesz także limitów pamięci, czasu i współbieżności warstwy wykonawczej.

Wartości kodu i budżetu w tym artykule są weryfikowane na podstawie próbek syntetycznych. Przedstawiają jedynie pomysły na obróbkę i nie stanowią gwarancji wszystkich rzeczywistych plików lub efektów produktu. Przed przystąpieniem do przetwarzania ważnych dokumentów prosimy o zachowanie oryginałów i zapoznanie się z nimi zgodnie z granicami i pozycjami akceptacji w tekście.

Jak zapobiec pochłonięciu wejścia do przesyłania obrazu? Wniosek w jednym zdaniu

Ogranicz także rozmiar przesyłanych bajtów i pikseli oraz ustaw budżety pamięci, czasu i współbieżności w warstwie wykonawczej. Nie patrz tylko na rozmiar pliku i nie wyłączaj ochrony, aby wyeliminować ostrzeżenia.

twoja sytuacjaZalecane praktykipowód
Określ, czy przesyłanie jest bezpieczne, wyłącznie na podstawie rozmiaru plikuOgranicz jednocześnie rozmiar przesyłanych bajtów i pikseliPliki obrazów o wysokim stopniu kompresji są małe i po dekodowaniu mogą nadal zajmować znacznie więcej pamięci, niż oczekiwano
Poduszka wyświetla ostrzeżenie o bombie dekompresyjnejZdefiniuj budżet na podstawie swojej działalności i określ, które ostrzeżenia powinny zostać uznane za odrzuconeBezpośrednie ustawienie MAX_IMAGE_PIXELS na None usunie ważną linię obrony
Trzeba obsłużyć wiele ramek lub jednoczesnych żądańZwiększ liczbę klatek, zgromadzone piksele, pamięć, limit czasu i współbieżnościPrzykłady pojedynczych klatek nie mogą obejmować sum wieloklatkowych i wartości szczytowych jednoczesnego dekodowania
Dopuszczalnie duże rysunki przekraczają domyślny budżetPostępuj zgodnie z przejrzystym procesem w przypadku dużych plików i informuj użytkowników, czy piksele lub bajty przekraczają limit.Przekroczenie limitu nie oznacza złych plików, użytkownicy muszą wiedzieć, jak się dostosować

Nie wyłączaj ochrony, aby wyeliminować ostrzeżenia

Poduszka posiada mechanizm zabezpieczający liczbę pikseli przed potencjalnymi bombami dekompresyjnymi. Bezpośrednie ustawienie MAX_IMAGE_PIXELS na None może spowodować zniknięcie ostrzeżenia, ale usuwa także ważną linię obrony. Budżety należy definiować na podstawie rodzaju działalności i powinno być jasne, które ostrzeżenia są promowane do odmów.

Sprawdzenie wpisu chronionego przez bibliotekę zarezerwowaną

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")

Wartości budżetowe służą wyłącznie testom syntetycznym. Przykłady dotyczą pojedynczych klatek i nie obejmują sum wieloramkowych, błędów kodera ani skoków równoczesnego dekodowania. Formalne wejście wymaga również:

  • Liczba klatek i skumulowane limity pikseli
  • Obsługuj niezaufane pliki w izolowanym środowisku wykonawczym

Odmowa ma inne obowiązki niż kwarantanna

Górny limit przesłanych bajtów dotyczy głównie obciążenia sieci i pamięci masowej, górny limit pikseli pojedynczej strony dotyczy typowych zagrożeń związanych z dużymi obrazami, limity pamięci i czasu ograniczają rzeczywiste zużycie wykonania, a górny limit współbieżności kontroluje całkowite wykorzystanie zasobów.

Ale każdy rodzaj kontroli ma słabe punkty: górny limit bajtów nie może zastąpić oceny skali dekodowania, górny limit piksela jednostronicowego nie pozwala na zobaczenie skumulowanej skali wielu klatek, limity pamięci i czasu również wymagają wytłumaczalnego sprzężenia zwrotnego o błędach, a górny limit współbieżności wymaga współpracy kolejek i przeciwciśnienia.

Przekroczenie budżetu nie jest synonimem złych plików

Dopuszczalnie duże rysunki mogą również przekraczać domyślny budżet. Należy zezwolić na jawny proces dużych plików, zamiast po cichu wyłączać wszystkie zabezpieczenia.

Wyjaśnij użytkownikowi, czy przekroczony limit to piksele czy bajty, aby wiedział, czy powinien przyciąć stronę, zmniejszyć rozdzielczość przechwytywania, czy wybrać specjalistyczną metodę przetwarzania.

Portal tłumaczeniowy powinien z wyprzedzeniem określić ryzyko wejściowe.

Dodanie własnego wstępnego sprawdzania danych wejściowych przed integracją z OmniDoc (wpis produktu) może pozwolić na wcześniejsze otrzymanie informacji zwrotnej nieobsługiwanym dużym obrazom. Inspekcja wstępna nie może zastąpić własnych ograniczeń platformy ani nie powinna udawać, że platforma wdrożyła zasady opisane w tym artykule. Jest to warstwa zrozumiałej pewności, którą tworzysz pomiędzy przesłaniem a dostarczeniem.

Źródła: Instrukcje ochrony przed dekompresją obrazów poduszek

📊 Porównanie rdzenia

KontrolaGłówne ograniczeniaPotrzebne są dalsze suplementy
Limit bajtów przesyłaniaObciążenia sieciowe i pamięci masowejSkala dekodowania
Maksymalna liczba pikseli na stronęTypowe ryzyka związane z obrazem na dużą skalęSkala kumulatywna wieloklatkowa
Pamięć i limity czasoweRzeczywiste zużycie wykonaniaWyjaśnialna informacja zwrotna błędów
Współczesna kapaCałkowite zamieszkanie zasobówKolejka i ciśnienie cofające się

🎯 Która metoda ci odpowiada?

Jeśli jesteś odpowiedzialny za przesyłanie punktów wejścia

Najpierw ustaw podwójne limity bajtów i pikseli, a następnie dodaj pamięć, czas i budżet współbieżności warstwy wykonawczej.

Jeśli napotkasz ostrzeżenie o bombie dekompresyjnej Pillow

Nie zamykaj czeku bezpośrednio. Najpierw zdefiniuj budżet firmy, a następnie zdecyduj, które ostrzeżenia powinny zostać przeniesione do odrzucenia.

Jeśli musisz obsługiwać wiele ramek lub jednoczesne żądania

Uzupełnij liczbę klatek na sekundę, skumulowane piksele, pamięć, czas i limity współbieżności, a także kolejkę i ciśnienie wsteczne.

Jeśli Twoi użytkownicy często przesyłają duże rysunki inżynierskie

Zaprojektuj przejrzyste workflowy dużych plików dla plików powyżej limitu i powiedz użytkownikom, czy limit to piksele czy bajty.

❓ Najczęściej zadawane pytania (FAQ)

1. Przesyłanie plików zajmuje tylko kilka megabajtów, więc dlaczego nadal istnieje ryzyko?

Zdekodowana pamięć zależy od rozmiaru obrazu; obrazy o wysokiej kompresji są szczególnie podatne na błędy w ocenie rozmiaru pliku.

2. Czy mogę ustawić MAX_IMAGE_PIXELS bezpośrednio na Brak?

Nie polecam. Choć mogłoby to wyeliminować ostrzeżenie, jednocześnie odebrało kluczową linię obrony Pillow.

3. Czy wartości budżetowe z przykładu można bezpośrednio wykorzystać w środowisku produkcyjnym?

Nie. Wartość budżetowa służy wyłącznie do testów syntetycznych; formalne wprowadzanie wymaga limitów wieloklatkowej i kumulacyjnej liczby pikseli oraz obsługuje pliki nieufne w izolowanym środowisku.

4. Czy powinieneś po prostu odrzucić duże zdjęcia, które przekraczają Twój budżet?

Ochrony nie powinno się cicho wyłączać. Zgodnie z prawem duże rysunki inżynierskie mogą podążać za wyraźnym przepływem dużych plików i informować użytkowników, czy limit to piksel czy bajt.

📝 Podsumowanie

Bezpieczeństwo portali do przesyłania OCR nie może polegać wyłącznie na rozmiarze pliku; wymagają one wspólnych ograniczeń pikseli, bajtów i budżetów warstw wykonawczych. Określenie budżetu przy jednoczesnym zachowaniu ochrony biblioteki oraz jasne wyjaśnienie użytkownikom powodów przekroczenia limitu zapewnia zarówno stabilność, jak i dostępność.

Doświadczenie teraz: Prześlij dokument, aby zacząć tłumaczyć, zachowując oryginalne formatowanie

Zaktualizowano 2026-11-14