Hoe voorkom ik dat één foto het volledige machinegeheugen in het OCR-uploadportaal opslokt?
Het geüploade bestand is slechts enkele megabytes groot, maar kan na het decoderen veel meer geheugen vereisen dan verwacht. Zeer comprimeerbare afbeeldingen zijn bijzonder gevoelig voor ongeldige beoordelingen van de bestandsgrootte. Het OCR-portaal moet zowel de geüploade byte- en pixelgrootte beperken, als het geheugen, de tijd en het gelijktijdigheidsbudget van de uitvoeringslaag.
Het geüploade bestand is slechts enkele megabytes groot, maar kan na decodering veel meer geheugen in beslag nemen dan verwacht. Zeer comprimeerbare afbeeldingen zijn bijzonder gevoelig voor het ongeldig maken van beoordelingen over de bestandsgrootte, dus alleen kijken naar de bestandsgrootte is onbetrouwbaar.
Dit artikel is geschreven voor ontwikkelaars die verantwoordelijk zijn voor uploadportals, beeldverwerking of OCR-integratie. Tegen de tijd dat u klaar bent met lezen, begrijpt u waarom u zowel uploadbytes als pixels moet beperken, hoe u een budget kunt definiëren zonder de bibliotheekbeveiliging uit te schakelen, en waarom u ook geheugen-, tijd- en gelijktijdigheidslimieten voor de uitvoeringslaag nodig heeft.
De code- en budgetwaarden in dit artikel worden geverifieerd met behulp van synthetische monsters. Ze illustreren alleen verwerkingsideeën en vormen geen garantie voor alle echte bestanden of producteffecten. Voordat u belangrijke documenten verwerkt, dient u de originelen te bewaren en deze te controleren op basis van de grenzen en acceptatie-items in de tekst.
Hoe voorkom je dat de ingang voor het uploaden van afbeeldingen wordt opgegeten? Conclusie in één zin
Beperk ook de grootte van geüploade bytes en pixels, en stel budgetten voor geheugen, tijd en gelijktijdigheid in op de uitvoeringslaag. Kijk niet alleen naar de bestandsgrootte en schakel de beveiliging niet uit om waarschuwingen te elimineren.
| jouw situatie | Aanbevolen praktijken | reden |
|---|---|---|
| Bepaal of uploaden veilig is, alleen op basis van de bestandsgrootte | Beperk tegelijkertijd de grootte van geüploade bytes en pixels | Zeer comprimeerbare afbeeldingsbestanden zijn klein en kunnen na het decoderen nog steeds veel meer geheugen in beslag nemen dan verwacht |
| Kussen geeft waarschuwing voor decompressiebom | Definieer uw budget op basis van uw bedrijf en bepaal welke waarschuwingen moeten worden omgezet in afwijzingen | Als u MAX_IMAGE_PIXELS rechtstreeks instelt op None, wordt een belangrijke verdedigingslinie verwijderd |
| Moet meerdere frames of gelijktijdige verzoeken verwerken | Verhoog het aantal frames, de geaccumuleerde pixels, het geheugen, de tijd en de gelijktijdigheidslimiet | Voorbeelden van enkelvoudige frames kunnen geen totalen van meerdere frames en gelijktijdige decoderingspieken omvatten |
| Juridisch gezien overschrijden grote tekeningen het standaardbudget | Volg een duidelijk proces voor grote bestanden en vertel gebruikers of pixels of bytes de limiet overschrijden. | Het overschrijden van de limiet betekent niet dat de bestanden slecht zijn; gebruikers moeten weten hoe ze zich moeten aanpassen |
Schakel de beveiliging niet uit om waarschuwingen te elimineren
Pillow heeft een beschermingsmechanisme voor het aantal pixels tegen mogelijke decompressiebommen. Door MAX_IMAGE_PIXELS rechtstreeks in te stellen op None kan de waarschuwing verdwijnen, maar wordt ook een belangrijke verdedigingslinie verwijderd. Budgetten moeten worden gedefinieerd op basis van het bedrijf en het moet duidelijk zijn welke waarschuwingen worden omgezet in afwijzingen.
Een gereserveerde, door de bibliotheek beveiligde toegangscontrole
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")
Budgetwaarden zijn alleen bedoeld voor synthetische tests. De voorbeelden hebben betrekking op afzonderlijke frames en hebben geen betrekking op totalen van meerdere frames, encoderbugs of gelijktijdige decoderingspieken. Formele toegang vereist ook:
- Framenummer en cumulatieve pixellimieten
- Behandel niet-vertrouwde bestanden in een geïsoleerde uitvoeringsomgeving
Weigeren heeft andere verantwoordelijkheden dan quarantaine
De bovengrens van geüploade bytes heeft voornamelijk te maken met netwerk- en opslaglasten, de bovengrens van pixels van één pagina heeft betrekking op de algemene risico's van grote afbeeldingen, de geheugen- en tijdslimieten beperken het daadwerkelijke uitvoeringsverbruik, en de bovengrens van gelijktijdigheid bepaalt het totale bronnengebruik.
Maar elk type controle heeft blinde vlekken: de bovengrens van bytes kan het oordeel over de decoderingsschaal niet vervangen, de bovengrens van één paginapixel kan de cumulatieve schaal van meerdere frames niet zien, geheugen- en tijdslimieten vereisen ook verklaarbare foutfeedback, en de bovengrens van gelijktijdigheid vereist de medewerking van wachtrijen en tegendruk.
Budgetoverschrijding is geen synoniem voor slechte bestanden
Ook juridisch grote tekeningen kunnen het standaardbudget overschrijden. Het zou toegestaan moeten worden om het expliciete proces van grote bestanden te doorlopen, in plaats van stilletjes alle beveiligingen uit te schakelen.
Leg aan de gebruiker uit of de overschreden limiet pixels of bytes is, zodat hij of zij weet of hij de pagina moet bijsnijden, de vastlegresolutie moet verlagen of een gespecialiseerde verwerkingsmethode moet kiezen.
Het vertaalportaal moet vooraf de inputrisico's vermelden.
Door een eigen invoercontrole toe te voegen vóór OmniDoc (Productinvoer)-integratie, kunnen niet-ondersteunde grote afbeeldingen eerder feedback ontvangen. Preflight kan de eigen beperkingen van het platform niet vervangen, en mag ook niet doen alsof het platform het beleid in dit artikel heeft geïmplementeerd. Het is een laag van verklaarbare zekerheid die u creëert tussen het uploaden en leveren.
Bronnen: Instructies voor decompressiebescherming tegen kussenbeeld
📊 Kernvergelijking
| controle | Belangrijkste beperkingen | Verdere aanvulling is nodig |
|---|---|---|
| Uploadbytelimiet | Netwerk- en opslaglasten | Decodeerschaal |
| Maximale pixels per pagina | Veelvoorkomende grootschalige beeldrisico's | Multi-frame cumulatieve schaal |
| Geheugen en tijdslimieten | Werkelijke uitvoeringsconsumptie | Verklaarbare foutfeedback |
| Gelijktijdige limiet | Totale bezetting van hulpbronnen | Wachtrij- en tegendruk |
🎯 Welke methode past bij jou?
Als je verantwoordelijk bent voor het uploaden van de toegangspunten
Stel eerst dubbele limieten in voor bytes en pixels, voeg dan het geheugen, de tijd en het gelijktijdige budget van de uitvoeringslaag toe.
Als je een Pillow decompressiebom waarschuwt
Sluit de cheque niet direct. Definieer eerst het bedrijfsbudget en beslis vervolgens welke waarschuwingen moeten worden opgevoerd naar afwijzing.
Als je meerdere frames of gelijktijdige verzoeken moet afhandelen
Vul framerate, cumulatieve pixels, geheugen, tijd en gelijktijdige limieten aan, samen met wachtrij- en backpressure.
Als je gebruikers vaak grote technische tekeningen uploaden
Ontwerp grote bestandsworkflows voor over-limit bestanden en vertel gebruikers of de over-limit pixels of bytes zijn.
❓ Veelgestelde Vragen (FAQ)
1. Bestanden uploaden kost maar een paar megabyte, dus waarom is er nog steeds risico?
Het gedecodeerde geheugen hangt af van de grootte van de afbeelding; zeer compressiebare afbeeldingen zijn bijzonder gevoelig voor het falen in het bestandsgrootte-beoordelingsfout.
2. Kan ik MAX_IMAGE_PIXELS direct op Geen zetten?
Niet aan te raden. Hoewel dit de waarschuwing kon wegnemen, nam het ook Pillows cruciale verdedigingslinie weg.
3. Kunnen de budgetwaarden in het voorbeeld direct in de productieomgeving worden gebruikt?
Nee. De budgetwaarde dient alleen voor synthesetesten; formele invoer vereist multi-frame en cumulatieve pixellimieten, en behandelt onbetrouwbare bestanden in een geïsoleerde omgeving.
4. Moet je gewoon grote afbeeldingen afwijzen die je budget overschrijden?
Bescherming mag niet stilletjes worden uitgeschakeld. Juridisch gezien kunnen grote technische tekeningen een duidelijke grote bestandsstroom volgen en gebruikers vertellen of de limiet pixel of byte is.
📝 Samenvatting
De beveiliging van OCR-uploadportalen kan niet uitsluitend op bestandsgrootte vertrouwen; ze vereisen gezamenlijke beperkingen van pixels, bytes en uitvoeringslaagbudgetten. Het definiëren van het budget terwijl bibliotheekbescherming behouden blijft en gebruikers duidelijk de redenen voor overlimiet uitleggen, zorgt voor zowel stabiliteit als beschikbaarheid.
Ervaar nu: upload je document om te beginnen met vertalen, waarbij je de originele opmaak behoudt


