02 dec 2025·8 min leestijd

Virusscannen bij bestandsuploads: architectuuropties voor apps

Virusscanning voor bestandsuploads uitgelegd voor documentintensieve apps: quarantaine-opslag, scanwachtrijen, toegangscontrole, retries en veilige vrijgave-workflows.

Virusscannen bij bestandsuploads: architectuuropties voor apps

Het probleem in eenvoudige woorden: onveilige bestanden in je app

Als je app mensen documenten laat uploaden, accepteer je bestanden die je zelf niet hebt gemaakt. In producten met veel documenten (klantenportalen, HR-systemen, claims-apps, vendor onboarding) komen uploads veel voor en delen gebruikers vaak bestanden uit e-mails, gedeelde mappen of van derden. Daardoor zijn deze apps een aantrekkelijk doelwit: één succesvolle upload kan zich via veel downloads verspreiden.

De risico's gaan verder dan alleen “een virus”. Een Word- of Excel-bestand kan kwaadaardige macro's bevatten, een PDF kan zo gemaakt zijn dat het bugs in de reader misbruikt, en een „factuur" kan een phishingdocument zijn dat iemand misleidt om een nepnummer te bellen of inloggegevens in te voeren. Sommige bestanden zijn subtieler gepoisond, bijvoorbeeld door een payload in een ZIP te verbergen, dubbele extensies te gebruiken (report.pdf.exe) of door externe content te embedden die thuis belt zodra het geopend wordt.

Vertrouwen op een enkele antivirus op één server is niet genoeg. Uploads kunnen meerdere app-instanties raken, tussen opslagsystemen bewegen of worden geserveerd vanuit object storage of een CDN. Als een pad in de code per ongeluk de ruwe upload blootstelt, kunnen gebruikers het bestand downloaden voordat de scan klaar is. Updates, verkeerde configuraties en tijdelijke admin-toegang kunnen op termijn ook scanningsstappen omzeilen.

Het heldere doel voor virusscannen bij bestandsuploads is simpel: geen ongescand bestand mag ooit downloadbaar of zichtbaar zijn voor iemand die niet expliciet toestemming heeft om quarantaine-inhoud te bekijken.

Definieer wat “veilig” betekent als een zakelijke regel, niet als gevoel. Bijvoorbeeld:

  • Moet een malware-scan doorstaan met een recente signatureset
  • Moet voldoen aan toegestane bestandstypen en groottebeperkingen
  • Moet enkel opgeslagen en geserveerd worden vanaf goedgekeurde locaties
  • Moet een audit-trail hebben: wie uploadde, wanneer en de uiteindelijke status
  • Moet geblokkeerd blijven tot een definitieve beslissing: vrijgeven of weigeren

Als je bouwt met een platform zoals AppMaster, behandel dan de “scanstatus” als een first-class veld in je datamodel en laat elke downloadactie die check uitvoeren. Die enkele poort voorkomt veel dure fouten.

Wat quarantaine echt betekent voor geüploade documenten

Een “quarantaine” kun je het beste zien als een staat in je systeem, niet alleen als een map in opslag. Het kernidee is simpel: het bestand bestaat, maar niemand kan het openen of downloaden totdat je app een duidelijke, vastgelegde scanuitkomst heeft. Dit is de kern van virusscannen bij bestandsuploads.

Quarantaine werkt meestal als een kleine levenscyclus met duidelijke statussen. Het expliciet houden van de staat maakt het moeilijker om per ongeluk onveilige inhoud te lekken via een preview, een directe URL of een exporttaak.

Een praktisch setje bestandstoestanden ziet er zo uit:

  • received (upload voltooid, nog niet gescand)
  • scanning (opgepakt door een worker)
  • clean (veilig om vrij te geven)
  • rejected (malware gevonden of beleidsinbreuk)
  • failed (scannerfout, timeout of beschadigd bestand)

Quarantaine heeft ook de juiste metadata nodig zodat je later toegang kunt afdwingen en kunt auditen wat er gebeurde. Sla minimaal op: de eigenaar (gebruiker of organisatie), status, originele bestandsnaam en type, checksum (voor deduplicatie en tamper-checks), opslaglocatie en tijdstempels (geüpload, scan gestart, scan voltooid). Veel teams bewaren ook de scanner-versie en details van het scanverdict.

Retentie is een beleidskeuze, maar moet doelbewust zijn. Bewaar quarantainebestanden alleen zo lang als nodig is om ze te scannen en fouten te debuggen. Korte retentie vermindert risico en kosten, maar je wilt nog steeds voldoende tijd om incidenten te onderzoeken en gebruikers te helpen die vragen zoals “waar is mijn upload gebleven?” stellen.

Bepaal ook wat je doet met bestanden die nooit klaar raken met scannen. Stel een maximale scantijd en een "expiration"-tijdstempel in. Als die deadline verstrijkt, zet het bestand op failed, blokkeer toegang en probeer ofwel automatisch een beperkt aantal keer opnieuw of verwijder het en vraag de gebruiker opnieuw te uploaden.

Tijdelijke opslagpatronen die risico verminderen

Tijdelijke opslag is waar de meeste uploadproblemen gebeuren. Het bestand zit in je systeem, maar je weet nog niet of het veilig is, dus je hebt een plek nodig die makkelijk te vergrendelen is en moeilijk per ongeluk te exposen.

Lokale schijf werkt voor één server, maar is fragiel. Als je schaalt naar meerdere app-servers moet je opslag delen, bestanden kopiëren en permissies consistent houden. Object storage (zoals een S3-achtige bucket of een cloudcontainer) is vaak veiliger voor documentrijke apps omdat toegangsregels gecentraliseerd zijn en logs helderder.

Een simpel patroon voor virusscannen bij bestandsuploads is om "quarantaine" te scheiden van "clean" opslag. Dit kan met twee buckets/containers, wat fouten minder waarschijnlijk maakt, of met een strikt prefix-structuur binnen één bucket, wat goedkoper en makkelijker te beheren kan zijn.

Als je prefixes gebruikt, maak ze dan onmogelijk te verwarren. Geef de voorkeur aan een layout zoals quarantine/<tenant_id>/<upload_id> en clean/<tenant_id>/<document_id>, niet aan door gebruikers opgegeven namen. Hergebruik nooit hetzelfde pad voor verschillende staten.

Houd deze regels in gedachten:

  • Sta geen publieke reads toe op quarantaine, zelfs niet "tijdelijk".
  • Genereer server-side objectnamen, niet door de client.
  • Partitioneer per tenant of account om blast radius te beperken.
  • Sla metadata (eigenaar, status, checksum) in je database op, niet in de bestandsnaam.

Versleutel at rest en wees strikt over wie kan ontsleutelen. De upload-API moet kunnen schrijven naar quarantaine, de scanner moet kunnen lezen uit quarantaine en schrijven naar clean, en de publiek zichtbare app mag alleen uit clean lezen. Als je cloud key policies ondersteunt, koppel ontsleutelrechten aan de kleinst mogelijke set rollen.

Grote bestanden vragen extra zorg. Bij multipart-uploads markeer het object niet als "klaar" totdat het laatste deel is gecommit en je de verwachte grootte en checksum hebt vastgelegd. Een veelgebruikte veilige aanpak is om delen naar quarantaine te uploaden en het object pas naar clean te kopiëren of te promoten nadat de scan is geslaagd.

Voorbeeld: in een klantenportaal gebouwd met AppMaster kun je elke upload als “pending” behandelen, opslaan in een quarantaine-bucket en pas een downloadknop tonen nadat de scanstatus verandert naar “clean”.

Architectuuropties: inline-scan versus background-scan

Bij het toevoegen van virusscanning voor bestandsuploads kies je meestal tussen twee stromingen: inline scannen (de gebruiker wacht) of scannen op de achtergrond (de app accepteert de upload maar blokkeert toegang totdat het is goedgekeurd). De juiste keuze hangt minder af van “veiligheidsniveau” (beide kunnen veilig zijn) en meer van snelheid, betrouwbaarheid en hoe vaak mensen bestanden uploaden.

Optie 1: Inline-scanning (gebruiker wacht)

Inline-scanning betekent dat het uploadverzoek pas voltooit als de scanner een resultaat teruggeeft. Het voelt eenvoudig omdat er maar één stap is: upload, scan, accepteren of weigeren.

Inline-scanning is meestal acceptabel wanneer bestanden klein zijn, uploads zeldzaam zijn en je de wachttijd voorspelbaar kunt houden. Bijvoorbeeld een intern teamtool waar gebruikers een paar PDF's per dag uploaden kan een pauze van 3 tot 10 seconden verdragen. Het nadeel is dat een trage scan de app langzaam maakt. Timeouts, retries en mobiele netwerken kunnen een schone file in een slechte gebruikerservaring veranderen.

Optie 2: Background-scanning (async)

Async-scanning slaat het bestand eerst op, markeert het als "gekwarantaineerd" en duwt een taak in een scanningwachtrij. De gebruiker krijgt snel een "upload ontvangen" antwoord, maar kan het bestand niet downloaden of previewen totdat het is goedgekeurd.

Deze aanpak is beter voor hoge volumes, grotere bestanden en drukke uren omdat het werk spreidt en je app responsief houdt. Het laat je ook scanning-workers apart van de web- of API-servers schalen.

Een praktisch hybride model is: voer snelle checks inline uit (allowlist van bestandstypen, groottebeperkingen, basisformatvalidatie) en doe de volledige antivirus-scan op de achtergrond. Dit vangt voor de hand liggende problemen vroeg zonder elke gebruiker te laten wachten.

Hier is een eenvoudige manier om te kiezen:

  • Kleine bestanden, laag volume, strikte “moet nu weten”-workflows: inline-scan
  • Grote bestanden, veel uploads of onvoorspelbare scantijd: background-scan
  • Strakke SLA's voor uploadresponsiviteit: background-scan plus duidelijke status-UI
  • Gemengde workloads: hybride (snelle checks eerst, volledige scan async)

Als je bouwt met AppMaster, vertaalt deze keuze zich vaak naar ofwel een synchrone API-endpoint (inline) of een Business Process dat scanwerk enqueuet en de bestandstatus bijwerkt wanneer resultaten binnenkomen.

Stap-voor-stap: een async-scanningwachtrij bouwen

Bouw veiligere upload-workflows
Modelleer quarantaine-staten en handhaaf downloadpoorten zonder code te schrijven.
Probeer AppMaster

Async-scanning betekent dat je een upload accepteert, deze in quarantaine vastzet en op de achtergrond scant. Gebruikers krijgen geen toegang totdat de scanner zegt dat het veilig is. Dit is meestal de meest praktische malware-scanningarchitectuur voor documentrijke apps.

1) Definieer het wachtrijbericht (houd het klein)

Behandel de wachtrij als een to-do lijst. Elke upload maakt één bericht dat naar het bestand wijst, niet het bestand zelf.

Een simpel bericht bevat meestal:

  • Bestands-ID (of objectkey) en tenant- of project-ID
  • Uploaded-by gebruikers-ID
  • Uploadtijdstempel en checksum (optioneel maar nuttig)
  • Pogingnummer (of een aparte retry-teller)

Vermijd het plaatsen van ruwe bytes in de wachtrij. Grote payloads kunnen limieten breken, meer kosten en blootstelling vergroten.

2) Bouw de workerflow (haal op, scan, registreer)

Een worker pakt een bericht, haalt het bestand uit quarantaine-opslag, scant het en schrijft daarna een beslissing terug.

Een duidelijke flow is:

  • Haal het bestand op via ID uit quarantaine-opslag (private bucket of private volume)
  • Draai de scanner (AV-engine of scanningservice)
  • Schrijf het resultaat naar je database: status (clean, infected, error), scannernaam/-versie en tijdstempels
  • Bij clean: verplaats het bestand naar goedgekeurde opslag of schakel een toegangsflag om zodat het downloadbaar wordt
  • Bij infected: houd het in quarantaine (of verwijder het) en informeer de juiste mensen

3) Maak het idempotent (veilig om opnieuw te verwerken)

Workers crashten, berichten worden soms twee keer bezorgd en retries gebeuren. Ontwerp zo dat het twee keer scannen van hetzelfde bestand geen schade veroorzaakt. Gebruik één enkele bron van waarheid zoals files.status en sta alleen geldige overgangen toe, bijvoorbeeld: uploaded -> scanning -> clean/infected/error. Als een worker clean ziet, moet hij stoppen en het bericht bevestigen.

4) Controleer concurrerende taken (voorkom scan-stormen)

Stel limieten per worker en per tenant in. Beperk hoeveel scans tegelijk kunnen draaien en overweeg aparte wachtrijen voor grote bestanden. Dit voorkomt dat één drukke klant alle scanner-capaciteit opeet.

5) Behandel fouten met retries en een audit-trail

Gebruik retries voor tijdelijke fouten (scanner timeout, netwerkprobleem) met een klein maximaal aantal pogingen. Zet daarna het bericht op een dead-letter queue voor handmatige review.

Bewaar een audit-trail: wie uploadde het document, wanneer het in quarantaine ging, welke scanner draaide, wat die besloot en wie het bestand goedkeurde of verwijderde. Die log is net zo belangrijk als het virusscannen zelf, vooral voor klantenportalen en compliance.

Toegangscontrole: maak quarantainebestanden echt privé

Quarantaine is niet alleen een status in je database. Het is een belofte dat niemand het bestand kan openen totdat het bewezen veilig is. De veiligste regel is simpel: serveer nooit quarantainebestanden via publieke URL's, zelfs niet "tijdelijke".

Een goede downloadflow is saai en strikt. De app moet elke download behandelen als een beschermde actie, niet als het ophalen van een afbeelding.

  1. Vraag een download aan
  2. Controleer of de gebruiker permissie heeft voor dat specifieke bestand
  3. Controleer de bestandstatus (quarantined, clean, rejected)
  4. Lever het bestand alleen als de status clean is

Als je signed URLs gebruikt, houd dezelfde gedachte: genereer ze alleen na permissie- en statuscontroles en maak ze kort geldig. Korte vervaltijden verminderen schade als de link lekt via logs, screenshots of een doorgestuurd bericht.

Role-based toegang helpt je speciale-case logica te vermijden die gaten wordt. Typische rollen voor documentrijke apps zijn:

  • Uploader: kan eigen uploads en scanstatus zien
  • Reviewer: kan schone bestanden bekijken en soms quarantainebestanden alleen in een veilige review-tool
  • Admin: kan onderzoeken, opnieuw scannen en toegang overrulen indien nodig
  • Externe gebruiker: kan alleen documenten zien die expliciet met hem/haar gedeeld zijn

Bescherm ook tegen ID-raadspel. Maak geen incrementele bestand-ID's openbaar zoals 12345. Gebruik ondoorzichtige (opaque) ID's en autoriseer altijd per gebruiker en per bestand (niet alleen “iedere ingelogde gebruiker”). Zelfs als je storage-bucket privé is, kan een onzorgvuldig API-endpoint nog steeds quarantaine-inhoud lekken.

Wanneer je virusscanning bij bestandsuploads implementeert, is de toegangslaag waar de meeste echte fouten gebeuren. In een platform als AppMaster handhaaf je deze checks in je API-endpoints en businesslogica voordat je een downloadresponse genereert, zodat quarantaine standaard privé blijft.

Vrijgeven, weigeren en opnieuw proberen: omgaan met scanresultaten

Zet een async-scanningsflow op
Gebruik een achtergrondproces om te scannen, resultaten te loggen en bestanden pas vrij te geven als ze schoon zijn.
Bouw nu

Zodra een bestand klaar is met scannen, is het belangrijkste om het in één duidelijke staat te zetten en de volgende stap voorspelbaar te maken. Behandel het scanresultaat als een poort: niets wordt downloadbaar totdat die poort dat toestaat.

Een simpele set uitkomsten dekt de meeste systemen:

  • Clean: geef het bestand vrij uit quarantaine en sta normale toegang toe.
  • Infected: blokkeer toegang permanent en trigger je workflow voor geïnfecteerde bestanden.
  • Unsupported: de scanner kan dit type niet beoordelen (of het is met wachtwoord beveiligd). Houd het geblokkeerd.
  • Scan error: tijdelijke fout (timeout, service niet beschikbaar). Houd het geblokkeerd.

Gebruikerscommunicatie moet duidelijk en rustig zijn. Vermijd angstaanjagende bewoordingen zoals “Uw account is gecompromitteerd.” Beter is: “Bestand wordt gecontroleerd. U kunt gewoon doorgaan.” Als het bestand wordt geblokkeerd, vertel dan wat de gebruiker kan doen: “Upload een ander bestandstype” of “Probeer het later opnieuw.” Voor unsupported bestanden, wees specifiek (bijvoorbeeld: “Versleutelde archieven kunnen niet worden gescand”).

Bij geïnfecteerde bestanden beslis vroeg of je ze verwijdert of bewaart. Verwijderen is eenvoudiger en vermindert risico. Bewaren kan helpen bij audits, maar alleen als je het isoleert, strikte toegang geeft en korte retentie hanteert en logt wie het kan zien (idealiter niemand behalve security-admins).

Retries zijn nuttig, maar alleen voor fouten die waarschijnlijk tijdelijk zijn. Stel een kleine retry-policy in zodat je geen eindeloze backlog bouwt:

  • Retry bij timeouts en scanner-downtime.
  • Retry niet bij “infected” of “unsupported”.
  • Beperk retries (bijv. 3) en markeer daarna als failed.
  • Voeg backoff toe tussen pogingen om overbelasting te voorkomen.

Behandel herhaalde fouten als een ops-probleem, niet als een gebruikersprobleem. Als veel bestanden in korte tijd op “scan error” terechtkomen, waarschuw je team en pauzeer je nieuwe releases. In AppMaster kun je deze staten in de database modelleren en notificaties routeren via ingebouwde messagingmodules zodat de juiste mensen snel op de hoogte zijn.

Voorbeeldscenario: een klantenportaal met veel documenten

Ga van ontwerp naar app
Genereer een productie-klare backend en UI voor uploads, wachtrijen en permissies.
Probeer bouwen

Een klantenportaal laat klanten facturen en contracten uploaden per project. Dit is een veelvoorkomende plek waar virusscanning bij bestandsuploads belangrijk is, omdat gebruikers zomaar alles van hun desktop uploaden, inclusief bestanden die van anderen zijn doorgestuurd.

Wanneer een klant een PDF uploadt, slaat het portaal het op in een tijdelijke, private locatie en maakt een database-record met status Pending scan. Het bestand wordt nog niet als downloadbaar getoond. Een scanning-worker pakt het bestand uit een wachtrij, voert de scan uit en zet het record op Clean of Blocked.

In de UI ziet de klant het document meteen verschijnen, maar met een duidelijke Pending-badge. De bestandsnaam en grootte zijn zichtbaar zodat ze weten dat de upload geslaagd is, maar de Download-knop is uitgeschakeld totdat de scan clean is. Als de scan langer duurt dan verwacht kan het portaal een simpel bericht tonen zoals: “We controleren dit bestand op veiligheid. Probeer het over een minuut opnieuw.”

Als de scanner een document flagt, ziet de klant Blocked met een korte, niet-technische notificatie: “Dit bestand is niet door een veiligheidstest gekomen.” Support en admins krijgen een aparte weergave met de scanreden en vervolgstappen. Zij kunnen:

  • het geblokkeerd houden en een nieuwe upload vragen
  • het verwijderen en vastleggen waarom
  • het als false positive markeren, alleen als beleid dat toestaat

Bij geschillen (“Ik heb het gisteren geüpload en jullie zijn het kwijtgeraakt”) zijn goede logs cruciaal. Bewaar tijdstempels voor upload ontvangen, scan gestart, scan voltooid, status gewijzigd en wie wat deed. Sla ook file-hash, originele bestandsnaam, uploader-account, IP-adres en scanner-resultcode op. Als je dit in AppMaster bouwt, kunnen Data Designer en een eenvoudig Business Process deze statussen en auditvelden beheren zonder quarantainebestanden aan reguliere gebruikers bloot te stellen.

Veelvoorkomende fouten die echte beveiligingslekken creëren

De meeste uploadbeveiligingsfouten zijn geen glamoureuze hacks. Het zijn kleine ontwerpkeuzes die per ongeluk een onveilig bestand als normaal document laten functioneren.

Een klassiek probleem is een race: de app accepteert een upload, geeft een "download"-URL terug en een gebruiker (of een andere service) kan het bestand ophalen voordat de scan klaar is. Bij virusscannen voor bestandsuploads beschouw je “geüpload” en “beschikbaar” als twee verschillende staten.

Hier herhalen zich fouten die vaak voorkomen:

  • Clean en quarantainebestanden in dezelfde bucket/map mengen en dan op naamgevingsregels vertrouwen. Eén verkeerde permissie of padgissing en quarantaine is nutteloos.
  • Vertrouwen op bestands extensies, MIME-type of client-side checks. Aanvallers kunnen alles .pdf noemen en je UI kijkt weg.
  • Geen planning voor scanner-downtime. Als de scanner traag of offline is, blijven bestanden eeuwig in “pending” en teams maken onveilige handmatige overrides.
  • Background-workers die dezelfde autorisatieregels overslaan als de hoofd-API. Een worker die “elk bestand” kan lezen is een stille privilege-escalatie.
  • ID's publiceren die makkelijk te raden zijn (zoals oplopende nummers) voor quarantaineitems, zelfs als je denkt dat de inhoud beschermd is.

Testing is ook een gap. Teams testen met een paar kleine, schone bestanden en denken dat het klaar is. Test ook grote uploads, corrupte bestanden en wachtwoord-beveiligde documenten, want juist daar falen scanners en parsers of timen ze uit.

Een eenvoudig real-world voorbeeld: een klant uploadt "contract.pdf" dat in werkelijkheid een hernoemde executable in een archief is. Als je portaal het meteen teruggeeft, of je supportteam kan quarantaine zonder checks benaderen, heb je een directe afleverroute naar andere gebruikers gecreëerd.

Snel checklist voordat je live gaat

Maak een veilig documentportaal
Bouw een klantportaal waarin downloads geblokkeerd blijven totdat scans slagen.
Start app

Voordat je virusscanning voor bestandsuploads live zet, doe een laatste ronde langs de plekken waar teams vaak aannemen “het is goed” en later ontdekken dat dat niet zo was. Het doel is simpel: een onveilig bestand mag niet leesbaar worden alleen omdat iemand een URL raadde, een verzoek herhaalde of een oude gecachte link gebruikte.

Begin bij de gebruikersflow. Iedere download, preview of "open file" actie moet de actuele scanstatus van het bestand bij het verzoek hercontroleren, niet alleen bij uploadtijd. Dit beschermt tegen racecondities (iemand klikt meteen), vertraagde scanresultaten en randgevallen waarbij een bestand opnieuw gescand wordt.

Gebruik deze pre-release checklist als minimum:

  • Quarantaine-opslag is standaard privé: geen publieke bucket-toegang, geen “iedereen met de link” en geen direct serveren vanuit ruwe objectopslag.
  • Elk bestandsrecord heeft een eigenaar (gebruiker, team of tenant) plus een duidelijke levenscyclusstaat zoals pending, clean, infected of failed.
  • Je scanningwachtrij en workers hebben begrensde retries, duidelijke backoff-regels en alerts wanneer items vastlopen of herhaaldelijk falen.
  • Auditlogs bestaan voor uploads, scanresultaten en downloadpogingen (inclusief geblokkeerde pogingen), met wie, wanneer en waarom.
  • Een handmatige override bestaat voor zeldzame gevallen, maar is admin-only, geregistreerd en tijdsgebonden (geen stille "mark clean" knop).

Zorg tenslotte dat je het systeem end-to-end kunt observeren. Je moet vragen kunnen beantwoorden als: “Hoeveel bestanden wachten er nu op scan?” en “Welke tenants zien fouten?” Als je op AppMaster bouwt, modelleer de bestandlevenscyclus in de Data Designer en handhaaf statuschecks in de Business Process Editor zodat regels consistent blijven tussen web en mobiel.

Volgende stappen: van ontwerp naar werkende app

Begin met het uitschrijven van de exacte staten waarin je bestanden kunnen verkeren en wat elke staat toestaat. Houd het simpel en expliciet: “uploaded”, “queued”, “scanning”, “clean”, “infected”, “scan_failed”. Voeg daarna toegangsregels toe naast elke staat. Wie kan het bestand zien, downloaden of verwijderen zolang het nog niet vertrouwd is?

Kies vervolgens de aanpak die past bij je volume en gebruikersdoelen. Inline-scanning is makkelijker uit te leggen, maar uploads kunnen traag aanvoelen. Async-scanning schaalt beter voor documentrijke apps, maar voegt staat, wachtrijen en “pending” UI toe.

Een praktische manier om van ontwerp naar bouwen te gaan is het prototypen van de volledige flow end-to-end met realistische documenten (PDF's, Office-bestanden, afbeeldingen, archieven) en realistisch gebruikersgedrag (meerdere uploads, annuleren, retries). Stop niet bij "de scanner werkt". Valideer dat de app nooit per ongeluk een quarantainebestand serveert.

Hier is een eenvoudig bouwplan dat je in een week kunt uitvoeren:

  • Definieer bestandstoestanden, overgangen en toegangsregels op één pagina
  • Kies inline, async of hybrid virusscanning voor bestandsuploads en documenteer de afwegingen
  • Implementeer upload -> quarantine storage -> scan job -> result callback, met auditlogs
  • Bouw de UI-staten die gebruikers zien (pending, blocked, failed, approved)
  • Voeg monitoring toe vanaf dag één: backloggrootte, faalpercentage en tijd-tot-clean

Als je zonder code bouwt, kan AppMaster je helpen met het modelleren van bestandsmetadata (status, eigenaar, checksum, tijdstempels), het bouwen van upload- en reviewschermen en het orkestreren van de scan-workflow met businesslogica en queue-achtige verwerking. Zo kun je vroeg de echte productflow testen en daarna de kritieke onderdelen verstevigen: permissies, opslag-scheiding en betrouwbare retries.

Beslis tenslotte wat “goed” betekent in cijfers. Stel waarschuwingsdrempels in voor lancering, zodat je vastgelopen scans en stijgende fouten ziet voordat gebruikers het merken.

Gemakkelijk te starten
Maak iets geweldigs

Experimenteer met AppMaster met gratis abonnement.
Als je er klaar voor bent, kun je het juiste abonnement kiezen.

Aan de slag
Virusscannen bij bestandsuploads: architectuuropties voor apps | AppMaster