Attaques
Upload de fichiers
L'upload de fichiers est une fonctionnalité courante, mais sensible. Un fichier reçu depuis un utilisateur peut contenir du contenu dangereux, être trop volumineux, usurper son type ou déclencher un comportement inattendu côté serveur.
Pourquoi c'est sensible
Un upload crée un pont entre le poste de l'utilisateur et l'infrastructure du site.
Utilisateur
│
Fichier envoyé
│
Serveur web
│
Stockage / traitement / téléchargement
Les risques dépendent de ce que l'application fait ensuite du fichier : stockage simple, affichage public, conversion, analyse, décompression ou traitement automatisé.
Risques fréquents
- fichier exécutable stocké dans un répertoire public
- extension trompeuse
- type MIME mensonger
- fichier trop volumineux
- archive contenant trop de fichiers
- nom de fichier dangereux
- contenu actif dans un document
- image ou PDF malformé exploitant un parseur vulnérable
- fuite de données par téléchargement non autorisé
Réflexe sécurité
Le nom, l'extension et le type MIME fournis par le client ne doivent pas être considérés comme fiables.
Contrôles essentiels
À appliquer côté serveur :
- liste blanche d'extensions autorisées
- vérification du type réel quand c'est possible
- taille maximale
- renommage du fichier
- stockage hors du répertoire exécutable
- droits fichiers restrictifs
- scan antivirus si pertinent
- journalisation des uploads
- quotas par utilisateur
- contrôle d'accès au téléchargement
Il vaut mieux autoriser explicitement quelques formats utiles que tenter d'interdire une liste infinie de formats dangereux.
Nom et chemin
Le nom original d'un fichier ne doit pas être utilisé directement comme chemin de stockage.
À éviter :
- conserver un nom dangereux
- accepter des chemins relatifs
- écraser un fichier existant
- exposer le chemin interne du serveur
Approche plus saine :
- générer un nom serveur unique
- conserver le nom original en métadonnée si nécessaire
- stocker dans un dossier dédié
- séparer stockage privé et public
Stockage public ou privé
| Stockage | Usage |
|---|---|
| Public | Fichiers destinés à être consultés par tout le monde |
| Privé | Fichiers soumis à authentification ou autorisation |
Un document privé ne doit pas être accessible par simple URL devinable. Le serveur doit vérifier les droits avant de le renvoyer.
Traitement des fichiers
Certaines applications transforment les fichiers reçus :
- redimensionnement d'image
- conversion PDF
- extraction d'archive
- génération d'aperçu
- lecture de métadonnées
Ces traitements doivent être isolés autant que possible, avec des limites de temps, mémoire, taille et permissions.
Logs utiles
À journaliser :
- utilisateur
- nom original
- nom interne
- taille
- type détecté
- résultat du contrôle
- refus éventuel
- téléchargement ou suppression
Ne journalise pas le contenu du fichier ni des données personnelles inutiles.
Bonnes pratiques
- refuser par défaut
- autoriser uniquement les formats nécessaires
- limiter la taille
- renommer côté serveur
- stocker hors exécution
- vérifier les droits au téléchargement
- nettoyer les fichiers temporaires
- surveiller les volumes anormaux
- garder les bibliothèques de parsing à jour
À retenir
Un upload doit être traité comme une entrée utilisateur à haut risque : contrôler, limiter, isoler, journaliser et vérifier les droits.
