← HTTP — sécurité avancée, 40 leçons de cours

Module 35 / 40 · 90 min

35. Téléchargements et Content-Disposition

Séparer autorisation du fichier et présentation au navigateur.

Votre progression apparaîtra ici lorsque JavaScript est actif.

La progression et le meilleur score sont enregistrés uniquement dans ce navigateur. Aucun compte n’est nécessaire ; effacer les données du navigateur les supprime. Les durées de modules sont indicatives et incluent les exercices.

Comprendre le mécanisme

Content-Disposition peut indiquer qu’une représentation doit être proposée en pièce jointe et fournir un nom de téléchargement. Ce nom est une métadonnée de présentation, pas une autorisation ni un chemin serveur sûr. Les variantes de paramètres permettent de traiter des noms selon un encodage défini ; une construction manuelle à partir d’une entrée libre peut introduire une syntaxe incorrecte. Utilisez l’API du framework prévue pour cet en-tête.

Raisonner et vérifier

Le serveur doit résoudre un identifiant de document vers une ressource autorisée, sans laisser l’appelant choisir arbitrairement un chemin du système de fichiers. Contrôlez les permissions à chaque téléchargement sensible et définissez cache et durée de disponibilité. Un lien signé est un contrat à part entière : sa portée, son expiration et sa diffusion doivent être explicites, sans confondre signature du lien et identité de toute personne qui le possède.

Présentation

Content-Disposition décrit la présentation du fichier. La permission doit être vérifiée séparément. Content-Disposition: attachment suggère un téléchargement au client. Cette instruction ne vérifie ni propriétaire ni confidentialité ; un document interdit reste une fuite même si le navigateur propose de l’enregistrer.

Erreur fréquente à comprendre

attachment accorde un droit de lecture au client.

La permission doit être vérifiée séparément.

Résolution maîtrisée

Un identifiant métier peut être résolu en chemin contrôlé. Le serveur doit limiter les ressources distribuées. Recevez un identifiant métier puis résolvez côté serveur un chemin autorisé. N’exposez pas un paramètre de chemin libre qui donnerait au client la possibilité de choisir un fichier système.

Erreur fréquente à comprendre

Le client doit choisir librement tout chemin absolu.

Le serveur doit limiter les ressources distribuées.

Nom de fichier

Les noms de fichiers doivent passer par une API adaptée. La construction doit empêcher les caractères et syntaxes indésirables. Utilisez une API de construction de disposition pour gérer caractères et encodage. Un nom provenant du client doit être contrôlé et ne doit pas être concaténé dans une ligne HTTP brute.

Erreur fréquente à comprendre

Concaténer tout nom reçu dans un en-tête est sûr.

La construction doit empêcher les caractères et syntaxes indésirables.

Avant lecture

Le propriétaire de l’objet doit être vérifié avant lecture. Une ressource existante peut être privée. Vérifiez l’acteur et le sujet avant d’ouvrir ou streamer le document. Une erreur tardive peut arriver après émission partielle de données, même si le statut final semble refuser l’accès.

Erreur fréquente à comprendre

L’existence du fichier suffit à l’autoriser.

Une ressource existante peut être privée.

URL opaque

Une URL opaque reste sensible selon son contrat. L’opacité ne prouve pas la permission. Une URL non devinable peut être une capacité au porteur selon son contrat. Protégez durée, diffusion et logs ; l’opacité ne remplace pas automatiquement une autorisation quand celle-ci est exigée.

Erreur fréquente à comprendre

Un nom difficile à deviner remplace toujours l’autorisation.

L’opacité ne prouve pas la permission.

Type explicite

Le type servi doit correspondre au contrat. Le serveur doit connaître la représentation distribuée. Servez le format prévu avec un Content-Type correct et les protections d’interprétation adaptées. Une extension de téléchargement ne doit pas être l’unique source de vérité sur la représentation reçue.

Erreur fréquente à comprendre

L’extension client définit toujours le bon Content-Type.

Le serveur doit connaître la représentation distribuée.

Cache

Les réponses privées demandent une politique de cache. La présentation ne définit pas seule le stockage. Un document personnel exige une stratégie de stockage et de partage cohérente. Vérifiez navigateur, CDN et routes alternatives ; attachment n’empêche pas à lui seul la conservation d’une copie.

Erreur fréquente à comprendre

attachment interdit automatiquement tous les caches partagés.

La présentation ne définit pas seule le stockage.

Erreurs minimisées

Les erreurs doivent éviter de révéler des chemins internes. Le diagnostic public doit rester minimisé. Un fichier absent ne doit pas exposer son chemin interne complet ou les répertoires du serveur. Retournez une catégorie publique stable et gardez le diagnostic privé nécessaire à l’exploitation.

Erreur fréquente à comprendre

Un échec de lecture doit afficher tout le système de fichiers.

Le diagnostic public doit rester minimisé.

Budgets

Le téléchargement doit respecter des budgets de ressources. Les limites de service restent nécessaires. Bornez taille, durée et concurrence de téléchargement selon la capacité. Un streaming peut réduire la mémoire sans rendre gratuits bande passante, descripteurs et occupation de connexion.

Erreur fréquente à comprendre

Un droit valide autorise une réponse infinie.

Les limites de service restent nécessaires.

Document tiers

Un test doit tenter la lecture d’un document tiers. La frontière d’autorisation exige un cas négatif. Créez deux comptes et demandez avec B le document de A. Vérifiez refus et absence d’octets confidentiels, puis un cas propriétaire qui reçoit exactement le document prévu.

Erreur fréquente à comprendre

Le téléchargement nominal prouve l’isolation entre comptes.

La frontière d’autorisation exige un cas négatif.

Atelier guidé : lire, expliquer et vérifier le code

HTTP/1.1 200 OK
Content-Type: application/pdf
Content-Disposition: attachment; filename="lab-report.pdf"

Contexte : document d’un autre compte, aucune autorisation vérifiée.

Le document appartient à un autre compte et aucun contrôle n’est exécuté. Les headers PDF et attachment ne corrigent pas cette absence. Placez l’autorisation avant la lecture des octets puis vérifiez le refus avec un identifiant valide d’un tiers et une réponse sans contenu partiel.

Répéter le mode de présentation ne change pas les droits. Le renommage ne crée pas d’autorisation. Les champs de présentation ne valident pas l’accès à l’objet. Le nom ne donne pas la permission.

Travail pratique : Créez deux documents fictifs appartenant à deux acteurs et testez leur téléchargement par identifiant. Ajoutez un nom de fichier Unicode.

Critères de correction : Vérifiez les permissions avant ouverture du fichier, générez l’en-tête avec l’API prévue et testez le nom présenté. Refusez les identifiants inconnus ou interdits sans exposer de chemin interne ni de trace.

Exemple commenté

Content-Type: application/pdf
Content-Disposition: attachment; filename="rapport-lab.pdf"
Cache-Control: private, no-store

Les champs organisent le rendu et le stockage de la réponse. Ils ne démontrent pas que l’utilisateur a le droit d’obtenir le document.

Exercice de mise en pratique

Créez deux documents fictifs appartenant à deux acteurs et testez leur téléchargement par identifiant. Ajoutez un nom de fichier Unicode.

Voir une proposition de correction

Vérifiez les permissions avant ouverture du fichier, générez l’en-tête avec l’API prévue et testez le nom présenté. Refusez les identifiants inconnus ou interdits sans exposer de chemin interne ni de trace.

Points de vérification

  • Identifiant métier vers chemin maîtrisé.
  • Autorisation avant lecture.
  • En-têtes construits par API.

Contrôle de connaissances

Cours associé : 35. Téléchargements et Content-Disposition ↗
Content-Disposition: attachment accorde-t-il un droit d’accès au fichier ?

Documentation de référence ↗

Validation du module

101 questions, objectif pédagogique de 75 %. Durée conseillée de 150 minutes, sans limite imposée. Les questions et les choix sont mélangés ; le corrigé apparaît après validation. Le contrôle rapide de la leçon et l’examen final du cours restent des exercices distincts.

Commencer ou reprendre les 101 questions →