Analyse antivirus pour les téléversements de fichiers : options d'architecture pour les applications
Analyse antivirus des téléversements de fichiers expliquée pour les apps riches en documents : stockage en quarantaine, files de scan, contrÎle d'accÚs, retries et workflows sûrs de libération.

Le problĂšme en termes clairs : des fichiers dangereux qui entrent dans votre application
Si votre application permet aux utilisateurs de tĂ©lĂ©verser des documents, vous acceptez des fichiers que vous n'avez pas créés. Dans les produits riches en documents (portails clients, systĂšmes RH, applications de sinistres, onboarding de fournisseurs), les tĂ©lĂ©versements sont frĂ©quents et les utilisateurs partagent souvent des fichiers provenant de threads d'eâmails, de partages ou de tiers. Cela fait de ces applications une cible pratique : un seul tĂ©lĂ©versement rĂ©ussi peut se propager Ă de nombreux tĂ©lĂ©chargements.
Les risques ne se limitent pas Ă un « virus ». Un fichier Word ou Excel peut contenir des macros malveillantes, un PDF peut ĂȘtre conçu pour exploiter des failles du lecteur, et une « facture » peut ĂȘtre un document d'hameçonnage qui incite quelqu'un Ă appeler un faux numĂ©ro ou Ă saisir des identifiants. Certains fichiers sont empoisonnĂ©s de maniĂšre plus discrĂšte, par exemple en cachant une charge utile dans un ZIP, en utilisant des doubles extensions (report.pdf.exe) ou en intĂ©grant du contenu distant qui contacte un serveur dĂšs l'ouverture.
Se fier Ă un simple antivirus installĂ© sur un seul serveur ne suffit pas. Les tĂ©lĂ©versements peuvent atteindre plusieurs instances d'app, passer entre des systĂšmes de stockage ou ĂȘtre servis depuis un stockage d'objets ou un CDN. Si un chemin de code expose accidentellement le fichier brut, des utilisateurs peuvent le tĂ©lĂ©charger avant la fin du scan. Les mises Ă jour, les mauvaises configurations et les accĂšs administrateurs « temporaires » peuvent aussi contourner le scan au fil du temps.
L'objectif clair pour l'analyse antivirus des tĂ©lĂ©versements de fichiers est simple : aucun fichier non scannĂ© ne doit jamais ĂȘtre tĂ©lĂ©chargeable ou consultable par quelqu'un qui n'est pas explicitement autorisĂ© Ă examiner le contenu mis en quarantaine.
Définissez ce que signifie « sûr » comme une rÚgle métier, pas comme une impression. Par exemple :
- Doit passer un scan antivirus avec un jeu de signatures Ă jour
- Doit correspondre aux types de fichiers et limites de taille autorisés
- Doit ĂȘtre stockĂ© et servi uniquement depuis des emplacements approuvĂ©s
- Doit avoir une traçabilité : qui a téléversé, quand et statut final
- Doit ĂȘtre bloquĂ© jusqu'Ă une dĂ©cision finale : libĂ©rer ou rejeter
Si vous construisez avec une plateforme comme AppMaster, traitez le « statut de scan » comme un champ de premiĂšre classe dans votre modĂšle de donnĂ©es et faites en sorte que chaque action de tĂ©lĂ©chargement le vĂ©rifie. Ce gardeâfou prĂ©vient beaucoup d'erreurs coĂ»teuses.
Ce que signifie vraiment la quarantaine pour les documents téléversés
La « quarantaine » est mieux pensĂ©e comme un Ă©tat dans votre systĂšme, pas seulement comme un dossier de stockage. L'idĂ©e clĂ© est simple : le fichier existe, mais personne ne peut l'ouvrir ou le tĂ©lĂ©charger tant que votre application n'a pas un rĂ©sultat de scan clair et enregistrĂ©. C'est le cĆur de l'analyse antivirus pour les tĂ©lĂ©versements de fichiers.
La quarantaine fonctionne généralement comme un petit cycle de vie avec des statuts explicites. Rendre l'état explicite rend plus difficile la fuite accidentelle de contenu dangereux via un aperçu, une URL directe ou un job d'export.
Un ensemble pratique d'états de fichier ressemble à ceci :
- reçu (téléversement terminé, pas encore scanné)
- en cours d'analyse (pris par un worker)
- sain (ok pour libération)
- rejeté (malware détecté ou violation de politique)
- échec (erreur du scanner, timeout ou fichier corrompu)
La quarantaine a aussi besoin des bons métadonnées pour que vous puissiez appliquer les accÚs et auditer ce qui s'est passé plus tard. Au minimum, stockez : le propriétaire (utilisateur ou organisation), le statut, le nom et type de fichier d'origine, le checksum (pour déduplication et vérifications de falsification), l'emplacement de stockage et les horodatages (téléversé, scan commencé, scan terminé). Beaucoup d'équipes enregistrent aussi la version du scanner et les détails du verdict du scan.
La rĂ©tention est une dĂ©cision de politique, mais elle doit ĂȘtre intentionnelle. Gardez les fichiers en quarantaine uniquement le temps nĂ©cessaire pour les scanner et dĂ©boguer les Ă©checs. Une rĂ©tention courte rĂ©duit les risques et les coĂ»ts, mais vous devez garder suffisamment de temps pour enquĂȘter sur les incidents et aider les utilisateurs qui demandent « oĂč est passĂ© mon tĂ©lĂ©versement ? »
Enfin, dĂ©cidez quoi faire des fichiers qui ne finissent jamais de se scanner. Fixez un temps maximal de scan et un horodatage d'expiration. Quand le dĂ©lai est dĂ©passĂ©, passez le fichier en Ă©chec, bloquez l'accĂšs et soit retentez automatiquement un nombre limitĂ© de fois, soit supprimezâle et demandez Ă l'utilisateur de reâtĂ©lĂ©verser.
Patterns de stockage temporaire qui réduisent le risque
Le stockage temporaire est l'endroit oĂč se produisent la plupart des problĂšmes d'upload. Le fichier est dans votre systĂšme, mais vous ne savez pas encore s'il est sĂ»r, donc vous avez besoin d'un emplacement facile Ă verrouiller et difficile Ă exposer par erreur.
Le disque local peut fonctionner pour un serveur unique, mais c'est fragile. Si vous scalez sur plusieurs serveurs d'app, il faut partager le stockage, copier des fichiers et garder des permissions cohérentes. Le stockage d'objets (type bucket S3 ou conteneur cloud) est souvent plus sûr pour les applications riches en documents parce que les rÚgles d'accÚs sont centralisées et les logs plus clairs.
Un pattern simple pour l'analyse antivirus des tĂ©lĂ©versements est de sĂ©parer le stockage « quarantaine » du stockage « clean ». Vous pouvez le faire avec deux buckets/conteneurs, ce qui rĂ©duit les erreurs, ou avec un prĂ©fixe strict dans un seul bucket, ce qui peut ĂȘtre moins coĂ»teux et plus simple Ă gĂ©rer.
Si vous utilisez des prĂ©fixes, rendezâles impossibles Ă confondre. PrĂ©fĂ©rez une structure comme quarantine/<tenant_id>/<upload_id> et clean/<tenant_id>/<document_id>, pas des noms fournis par l'utilisateur. Ne rĂ©utilisez jamais le mĂȘme chemin pour des Ă©tats diffĂ©rents.
Gardez ces rĂšgles en tĂȘte :
- N'autorisez pas les lectures publiques sur la quarantaine, mĂȘme « temporairement ».
- Générez des noms d'objet cÎté serveur, pas cÎté client.
- Partitionnez par locataire ou compte pour réduire le rayon d'impact.
- Stockez les métadonnées (propriétaire, statut, checksum) dans votre base de données, pas dans le nom de fichier.
Chiffrez au repos, et soyez strict sur qui peut déchiffrer. L'API de téléversement doit pouvoir écrire en quarantaine, le scanner doit pouvoir lire la quarantaine et écrire dans le stockage clean, et l'application publique ne doit lire que depuis le clean. Si votre cloud supporte des policies de clés, liez les droits de décryptage au plus petit ensemble de rÎles possible.
Les gros fichiers nĂ©cessitent des prĂ©cautions supplĂ©mentaires. Pour les uploads multipart, ne marquez pas l'objet comme « prĂȘt » tant que la derniĂšre partie n'est pas commitĂ©e et que la taille et le checksum attendus sont enregistrĂ©s. Une approche sĂ»re courante est d'uploader les parties en quarantaine, puis de copier ou promouvoir l'objet vers clean uniquement aprĂšs un scan concluant.
Exemple : dans un portail client construit avec AppMaster, traitez chaque tĂ©lĂ©versement comme « pending », stockezâle dans un bucket de quarantaine, et n'affichez un bouton de tĂ©lĂ©chargement que lorsque le statut de scan passe à « clean ».
Options d'architecture : scan inline vs scan en arriĂšreâplan
Quand vous ajoutez l'analyse antivirus pour les tĂ©lĂ©versements, vous choisissez gĂ©nĂ©ralement entre deux flux : scanner inline (l'utilisateur attend) ou scanner en arriĂšreâplan (l'app accepte le tĂ©lĂ©versement mais bloque l'accĂšs jusqu'Ă ce qu'il soit validĂ©). Le bon choix dĂ©pend moins du « niveau de sĂ©curitĂ© » (les deux peuvent ĂȘtre sĂ»rs) et plus de la rapiditĂ©, de la fiabilitĂ© et de la frĂ©quence des tĂ©lĂ©versements.
Option 1 : Scan inline (l'utilisateur attend)
Le scan inline signifie que la requĂȘte de tĂ©lĂ©versement ne se termine pas tant que le scanner n'a pas renvoyĂ© un rĂ©sultat. C'est simple en apparence : un seul pas â tĂ©lĂ©versement, scan, acceptation ou rejet.
Le scan inline est acceptable quand les fichiers sont petits, les tĂ©lĂ©versements rares et que vous pouvez garder un temps d'attente prĂ©visible. Par exemple, un outil d'Ă©quipe oĂč les utilisateurs tĂ©lĂ©versent quelques PDF par jour peut tolĂ©rer une pause de 3 Ă 10 secondes. L'inconvĂ©nient est qu'un scan lent rend l'app lente. Les timeouts, retry et rĂ©seaux mobiles peuvent transformer un fichier sain en mauvaise expĂ©rience utilisateur.
Option 2 : Scan en arriĂšreâplan (asynchrone)
Le scan asynchrone stocke d'abord le fichier, le marque « en quarantaine » et pousse un job dans une file de scan. L'utilisateur obtient une réponse rapide « téléversement reçu », mais ne peut pas télécharger ou prévisualiser le fichier tant qu'il n'est pas validé.
Cette approche est préférable pour les volumes importants, les gros fichiers et les heures de pointe parce qu'elle répartit le travail et garde votre app réactive. Elle permet aussi de scaler les workers de scan séparément des serveurs web/API.
Un hybride pratique : effectuer des vĂ©rifications rapides inline (allowlist de types, limites de taille, validations de format basiques), puis faire l'antivirus complet en arriĂšreâplan. Cela filtre les problĂšmes Ă©vidents sans faire attendre tous les utilisateurs.
Voici une maniĂšre simple de choisir :
- Petits fichiers, faible volume, workflows qui doivent savoir tout de suite : scan inline
- Gros fichiers, beaucoup de tĂ©lĂ©versements, ou temps de scan imprĂ©visible : scan en arriĂšreâplan
- SLA stricts pour la rĂ©activitĂ© : scan en arriĂšreâplan + UI de statut claire
- Workloads mixtes : hybride (vérifications rapides d'abord, scan complet en asynchrone)
Si vous construisez avec AppMaster, ce choix correspond souvent soit à un endpoint API synchrone (inline) soit à un Business Process qui enfile le travail de scan et met à jour le statut du fichier à l'arrivée des résultats.
Pas Ă pas : construire une file de scan asynchrone
Le scan asynchrone signifie que vous acceptez un tĂ©lĂ©versement, le verrouillez en quarantaine, et le scannez en arriĂšreâplan. Les utilisateurs n'obtiennent pas l'accĂšs avant que le scanner ne dĂ©clare le fichier sĂ»r. C'est gĂ©nĂ©ralement l'architecture la plus pratique pour les applications riches en documents.
1) DĂ©finir le message de la file (gardezâle lĂ©ger)
Traitez la file comme une toâdo list. Chaque tĂ©lĂ©versement crĂ©e un message qui pointe vers le fichier, pas le fichier luiâmĂȘme.
Un message simple inclut généralement :
- ID de fichier (ou clé d'objet) et ID de locataire/projet
- ID de l'utilisateur qui a téléversé
- Timestamp du téléversement et checksum (optionnel mais utile)
- Numéro de tentative (ou compteur de retry séparé)
Ăvitez de mettre des octets bruts dans la file. Les gros payloads peuvent dĂ©passer les limites, coĂ»ter plus cher et augmenter l'exposition.
2) Construire le flux du worker (récupérer, scanner, enregistrer)
Un worker lit un message, récupÚre le fichier depuis le stockage de quarantaine, le scanne, puis écrit une décision.
Un flux clair :
- Récupérer le fichier par ID depuis le stockage de quarantaine (bucket privé ou volume privé)
- Lancer le scanner (moteur AV ou service de scan)
- Ăcrire le rĂ©sultat dans votre base de donnĂ©es : statut (clean, infected, error), nom/version du scanner, et horodatages
- Si clean : déplacer le fichier vers le stockage approuvé ou basculer un flag d'accÚs pour qu'il devienne téléchargeable
- Si infecté : le laisser en quarantaine (ou le supprimer) et notifier les personnes concernées
3) Rendre le processus idempotent (sûr à retraiter)
Les workers plantent, les messages sont livrĂ©s deux fois, et les retries ont lieu. Concevez pour que le scan du mĂȘme fichier plusieurs fois ne cause pas de dommages. Utilisez une source de vĂ©ritĂ© unique comme files.status et n'autorisez que des transitions valides, par exemple : uploaded -> scanning -> clean/infected/error. Si un worker voit clean, il doit arrĂȘter et ack le message.
4) ContrÎler la concurrence (éviter les afflux de scans)
Fixez des limites par worker et par locataire. Limitez le nombre de scans concurrents et envisagez des files sĂ©parĂ©es pour les gros fichiers. Cela empĂȘche un client trĂšs actif de consommer toute la capacitĂ© du scanner.
5) Gérer les échecs avec retries et piste d'audit
Utilisez des retries pour les erreurs temporaires (timeout du scanner, problĂšme rĂ©seau) avec un nombre d'essais max. AprĂšs cela, envoyez le message vers une deadâletter queue pour revue manuelle.
Conservez une piste d'audit : qui a téléversé le document, quand il est entré en quarantaine, quel scanner a tourné, quelle décision a été prise, et qui a approuvé ou supprimé le fichier. Ce journal est aussi important que l'analyse antivirus, surtout pour les portails clients et la conformité.
ContrÎle d'accÚs : garder les fichiers en quarantaine vraiment privés
La quarantaine n'est pas juste un statut dans la base. C'est une promesse que personne ne peut ouvrir le fichier tant qu'il n'est pas prouvĂ© sĂ»r. La rĂšgle la plus sĂ»re est simple : ne jamais servir les fichiers en quarantaine via des URLs publiques, mĂȘme « temporaires ».
Un bon flux de téléchargement est ennuyeux et strict. L'application doit traiter chaque téléchargement comme une action protégée, et non comme la récupération d'une image.
- Demande de téléchargement
- Vérifier la permission de l'utilisateur pour ce fichier spécifique
- Vérifier le statut du fichier (quarantaine, clean, rejeté)
- Servir le fichier uniquement si le statut est clean
Si vous utilisez des URLs signĂ©es, gardez la mĂȘme idĂ©e : gĂ©nĂ©rezâles seulement aprĂšs vĂ©rification des permissions et du statut, et rendezâles de courte durĂ©e. Une expiration courte rĂ©duit les dĂ©gĂąts si le lien fuit via des logs, captures d'Ă©cran ou un eâmail transfĂ©rĂ©.
L'accÚs basé sur les rÎles aide à éviter la logique des « cas spéciaux » qui devient une faille. RÎles typiques pour les apps documentaires :
- Téléverseur : voit ses propres téléversements et leur statut de scan
- Relecteur : peut voir les fichiers clean, et parfois voir la quarantaine seulement via un outil de revue sécurisé
- Admin : peut investiguer, relancer un scan et outrepasser l'accÚs si nécessaire
- Utilisateur externe : n'accÚde qu'aux documents explicitement partagés avec lui
ProtĂ©gez aussi contre la dĂ©couverte d'IDs. N'exposez pas d'IDs incrĂ©mentaux comme 12345. Utilisez des IDs opaques et autorisez toujours par utilisateur et par fichier (pas seulement « tout utilisateur connectĂ© »). MĂȘme si votre bucket est privĂ©, un endpoint API nĂ©gligent peut quand mĂȘme fuir du contenu en quarantaine.
Quand vous implĂ©mentez l'analyse antivirus pour les tĂ©lĂ©versements, la couche d'accĂšs est lĂ oĂč surviennent la plupart des Ă©checs rĂ©els. Sur une plateforme comme AppMaster, vous appliqueriez ces vĂ©rifications dans vos endpoints API et votre logique mĂ©tier avant de gĂ©nĂ©rer toute rĂ©ponse de tĂ©lĂ©chargement, pour que la quarantaine reste privĂ©e par dĂ©faut.
Libération, rejet et retries : gérer les résultats du scan
Une fois qu'un fichier a fini d'ĂȘtre scannĂ©, l'essentiel est de le positionner dans un Ă©tat clair et de rendre la suite prĂ©visible. Traitez le rĂ©sultat du scan comme une porte : rien ne devient tĂ©lĂ©chargeable tant que la porte ne l'autorise pas.
Un ensemble d'issues simple couvre la plupart des systĂšmes :
- Clean : libérer le fichier de la quarantaine et autoriser l'accÚs normal.
- Infected : bloquer l'accÚs définitivement et déclencher votre workflow pour fichiers infectés.
- Unsupported : le scanner ne peut pas évaluer ce type (ou il est protégé par mot de passe). Le garder bloqué.
- Scan error : échec temporaire (timeout, service indisponible). Le garder bloqué.
Les messages aux utilisateurs doivent ĂȘtre clairs et rassurants. Ăvitez des formulations alarmantes comme « Votre compte est compromis ». Mieux vaut : « Le fichier est en cours de vĂ©rification. Vous pouvez continuer Ă travailler. » Si le fichier est bloquĂ©, indiquez la marche Ă suivre : « TĂ©lĂ©versez un autre type de fichier » ou « RĂ©essayez plus tard ». Pour les fichiers non supportĂ©s, soyez prĂ©cis (par exemple : « Les archives chiffrĂ©es ne peuvent pas ĂȘtre scannĂ©es »).
Pour les fichiers infectés, décidez tÎt si vous supprimez ou conservez. Supprimer est plus simple et réduit le risque. Conserver peut aider aux audits, mais seulement si vous le faites dans une zone isolée avec accÚs strict et rétention courte, et en consignant qui peut y accéder (idéalement, personne sauf les admins sécurité).
Les retries sont utiles, mais uniquement pour les erreurs probablement temporaires. Fixez une petite politique de retry pour éviter d'accumuler un backlog infini :
- Retenter sur timeouts et indisponibilité du scanner.
- Ne pas retenter sur « infected » ou « unsupported ».
- Caper les retries (par exemple 3) puis marquer en échec.
- Ajouter du backoff entre les tentatives pour éviter la surcharge.
Enfin, traitez les échecs répétés comme un problÚme ops, pas un problÚme utilisateur. Si beaucoup de fichiers passent en « scan error » en peu de temps, alertez l'équipe et mettez en pause les nouvelles libérations. Dans AppMaster, modélisez ces états en base de données et routez les notifications via les modules de messagerie intégrés pour que les bonnes personnes soient informées rapidement.
Scénario d'exemple : un portail client avec beaucoup de documents
Un portail client permet aux clients de tĂ©lĂ©verser factures et contrats par projet. C'est un cas courant oĂč l'analyse antivirus pour les tĂ©lĂ©versements importe, car les utilisateurs glissent ce qu'ils ont sur leur bureau, y compris des fichiers transfĂ©rĂ©s par d'autres.
Quand un client téléverse un PDF, le portail l'enregistre dans un emplacement temporaire privé et crée un enregistrement en base avec le statut Pending scan. Le fichier n'est pas encore affiché comme téléchargeable. Un worker de scan récupÚre le fichier depuis une file, lance le scan, puis met à jour l'enregistrement en Clean ou Blocked.
Dans l'UI, le client voit le document apparaßtre immédiatement, mais avec un badge Pending clair. Le nom et la taille du fichier sont visibles pour confirmer que le téléversement a réussi, mais le bouton Télécharger reste désactivé tant que le scan n'est pas clean. Si le scan prend plus de temps que prévu, le portail peut afficher un message simple : « Nous vérifions ce fichier. Réessayez dans une minute. »
Si le scanner signale un document, le client voit Blocked avec une note non technique : « Ce fichier a échoué à une vérification de sécurité. » Le support et les admins ont une vue séparée qui inclut la raison du scan et les actions possibles. Ils peuvent :
- le garder bloqué et demander un nouveau téléversement
- le supprimer et enregistrer la raison
- le marquer comme faux positif uniquement si la politique le permet
En cas de litiges (« Je l'ai téléversé hier et vous l'avez perdu »), de bons logs sont essentiels. Conservez les horodatages pour téléversement reçu, scan commencé, scan terminé, changement de statut et qui a effectué quelle action. Enregistrez aussi le hash du fichier, le nom d'origine, le compte du téléverseur, l'adresse IP et le code de résultat du scanner. Si vous construisez cela dans AppMaster, le Data Designer plus un Business Process simple peuvent gérer ces statuts et champs d'audit sans exposer les fichiers en quarantaine aux utilisateurs ordinaires.
Erreurs courantes qui créent de vraies failles de sécurité
La plupart des échecs de sécurité liés aux uploads ne sont pas des hacks sophistiqués. Ce sont des choix de conception mineurs qui font qu'un fichier dangereux se comporte comme un document normal.
Un problÚme classique est une condition de course : l'app accepte un téléversement, renvoie une URL de téléchargement, et l'utilisateur (ou un autre service) peut récupérer le fichier avant la fin du scan. Si vous gérez l'analyse antivirus des téléversements, traitez « téléversé » et « disponible » comme deux états distincts.
Voici des erreurs récurrentes :
- MĂ©langer fichiers clean et quarantaine dans le mĂȘme bucket/dossier, puis compter sur des rĂšgles de nommage. Une mauvaise permission ou un mauvais chemin et la quarantaine devient inutile.
- Se fier aux extensions de fichier, au type MIME ou aux vérifications cÎté client. Un attaquant peut renommer n'importe quoi en .pdf et votre UI ne verra rien.
- Ne pas prévoir l'indisponibilité du scanner. Si le scanner est lent ou hors ligne, les fichiers peuvent stagner en pending, et les équipes commencent à ajouter des overrides manuels non sûrs.
- Laisser les workers en arriĂšreâplan ignorer les mĂȘmes rĂšgles d'autorisation que l'API principale. Un worker qui peut lire « n'importe quel fichier » est une Ă©lĂ©vation silencieuse de privilĂšges.
- Publier des IDs faciles Ă deviner (numĂ©ros incrĂ©mentaux) pour des items en quarantaine, mĂȘme si vous pensez que le contenu est protĂ©gĂ©.
Les tests sont un autre angle faible. Les Ă©quipes testent avec quelques petits fichiers propres et pensent que c'est terminĂ©. Testez aussi les gros uploads, les fichiers corrompus et les documents protĂ©gĂ©s par mot de passe, car ce sont prĂ©cisĂ©ment les cas oĂč les scanners ou parseurs Ă©chouent ou prennent trop de temps.
Un exemple concret : un utilisateur télécharge un « contract.pdf » qui est en réalité un exécutable renommé à l'intérieur d'une archive. Si votre portail le sert instantanément, ou si votre support peut accéder à la quarantaine sans contrÎles adéquats, vous avez créé une voie directe de diffusion vers d'autres utilisateurs.
Checklist rapide avant la mise en production
Avant de dĂ©ployer l'analyse antivirus des tĂ©lĂ©versements, faites un dernier passage sur les zones oĂč les Ă©quipes supposent « ça va » et dĂ©couvrent plus tard que non. L'objectif est simple : un fichier dangereux ne doit jamais devenir lisible parce que quelqu'un a devinĂ© une URL, relancĂ© une requĂȘte ou utilisĂ© un lien mis en cache.
Commencez par le flux utilisateur. Tout tĂ©lĂ©chargement, aperçu ou action « ouvrir le fichier » doit reverifier le statut de scan au moment de la requĂȘte, pas seulement au tĂ©lĂ©versement. Cela vous protĂšge des conditions de course (clic immĂ©diat), des rĂ©sultats de scan retardĂ©s et des cas oĂč un fichier est reâscannĂ©.
Utilisez cette checklist prĂ©âdĂ©ploiement comme base minimale :
- Le stockage en quarantaine est privé par défaut : pas d'accÚs public au bucket, pas de « anyone with the link », et pas de service direct depuis le stockage brut.
- Chaque enregistrement de fichier a un propriétaire (utilisateur, équipe ou locataire) et un état de cycle de vie clair comme pending, clean, infected ou failed.
- Votre file de scan et vos workers ont des retries bornés, des rÚgles de backoff claires et des alertes quand des éléments restent bloqués ou échouent en série.
- Des logs d'audit existent pour les téléversements, les résultats de scan et les tentatives de téléchargement (y compris les tentatives bloquées), avec qui, quand et pourquoi.
- Un override manuel existe pour les cas rares, mais est réservé aux admins, enregistré et limité dans le temps (pas de bouton « marquer clean » silencieux).
Enfin, assurezâvous de pouvoir observer le systĂšme de bout en bout. Vous devez pouvoir rĂ©pondre : « Combien de fichiers sont en attente de scan maintenant ? » et « Quels locataires rencontrent des Ă©checs ? » Si vous bĂątissez sur AppMaster, modĂ©lisez le cycle de vie des fichiers dans le Data Designer et appliquez les vĂ©rifications d'Ă©tat dans le Business Process Editor pour que les rĂšgles restent cohĂ©rentes entre web et mobile.
Ătapes suivantes : transformer le design en application fonctionnelle
Commencez par noter les Ă©tats exacts que peuvent prendre vos fichiers et ce que permet chaque Ă©tat. Gardezâle simple et explicite : « uploaded », « queued », « scanning », « clean », «infected», «scan_failed». Ajoutez ensuite les rĂšgles d'accĂšs pour chacun. Qui peut voir le fichier, le tĂ©lĂ©charger ou le supprimer tant qu'il n'est pas encore de confiance ?
Ensuite, choisissez l'approche qui correspond à votre volume et à vos objectifs UX. Le scan inline est plus simple à expliquer, mais peut ralentir les téléversements. Le scan asynchrone scale mieux pour les apps documentaires, mais ajoute des états, des files et une UI « pending ».
Une façon pragmatique de passer du design Ă la construction est de prototyper le flux complet de bout en bout avec des documents rĂ©alistes (PDF, fichiers Office, images, archives) et des comportements utilisateurs rĂ©alistes (multiples tĂ©lĂ©versements, annulations, retries). Ne vous arrĂȘtez pas au « le scanner marche ». Validez que l'app ne sert jamais un fichier en quarantaine, mĂȘme par accident.
Voici un plan de construction simple réalisable en une semaine :
- Définir états de fichiers, transitions et rÚgles d'accÚs sur une page
- Choisir inline, async ou hybride pour l'analyse antivirus et documenter les compromis
- Implémenter upload -> stockage en quarantaine -> job de scan -> callback de résultat, avec logs d'audit
- Construire les états UI que verront les utilisateurs (pending, blocked, failed, approved)
- Ajouter du monitoring dÚs le premier jour : taille du backlog, taux d'échec et temps jusqu'à clean
Si vous construisez sans code, AppMaster peut vous aider à modéliser les métadonnées des fichiers (statut, propriétaire, checksum, horodatages), créer des écrans d'upload et de revue, et orchestrer le workflow de scan avec de la logique métier et du traitement style file d'attente. Cela vous permet de tester le flux réel du produit tÎt, puis d'assainir les parties qui comptent : permissions, séparation du stockage et retries fiables.
Enfin, décidez ce que signifie « bon » en chiffres. Fixez des seuils d'alerte avant le lancement, afin de repérer les scans bloqués et les échecs croissants avant que les utilisateurs ne s'en aperçoivent.


