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

Module 34 / 40 · 90 min

34. Uploads, ZIP et budgets par couche

Valider le contenu reçu sans confondre découpage technique et import autonome.

Lessons, exercises and questions in this path are in French. The interface follows the site language.

Your progress will appear here when JavaScript is active.

Progress and best score are stored only in this browser. No account is needed; clearing browser data removes them. Module times are estimates including exercises.

Comprendre le mécanisme

Un upload traverse plusieurs plafonds : proxy, moteur PHP, formulaire et logique de traitement. Le type MIME déclaré et le nom client sont des assertions non fiables. Une archive ajoute un risque de chemins dangereux, de fichiers inattendus et d’expansion excessive. La taille compressée, la somme décompressée, le nombre d’entrées et la taille de chaque image sont des dimensions distinctes à borner.

Raisonner et vérifier

Un découpage binaire d’un ZIP ne produit pas nécessairement plusieurs archives indépendantes lisibles par un importeur. Pour fractionner des réalisations, chaque partie doit contenir son manifeste JSON et les images qu’il référence. Si une seule image dépasse le plafond réseau, répartir les lignes ne suffit pas : il faut adapter une copie de l’image ou choisir un transfert séparé compatible avec le contrat d’import.

Budget multipart

Le multipart peut dépasser la taille du ZIP seul. L’enveloppe et les autres champs ajoutent des octets. Prévoyez fichier, métadonnées et champs de formulaire dans la limite de requête. Un ZIP sous un plafond exprimé pour le corps complet peut encore être refusé lorsque l’enveloppe le fait dépasser.

Understand this common mistake

Un ZIP sous le seuil implique toute requête sous ce seuil.

L’enveloppe et les autres champs ajoutent des octets.

Découpe binaire

Un fractionnement binaire ne crée pas des ZIP indépendants. L’importeur a besoin d’une structure d’archive complète. split produit des fragments d’un flux, pas plusieurs archives ZIP indépendantes. Un importeur qui attend chaque fois une archive complète ne peut pas utiliser directement ces fragments sans mécanisme de réassemblage.

Understand this common mistake

Chaque segment binaire est automatiquement importable comme archive.

L’importeur a besoin d’une structure d’archive complète.

Parties autonomes

Des parties importables doivent inclure leurs données référencées. Le contrat de l’import exige les références nécessaires. Pour reconstruire plusieurs imports, chaque archive doit contenir un manifeste valide et toutes les images référencées par ses éléments. Si une seule image dépasse le plafond, diviser uniquement les lignes ne résout pas ce cas.

Understand this common mistake

Une partie JSON peut toujours omettre toutes ses images.

Le contrat de l’import exige les références nécessaires.

Expansion

La taille décompressée doit être bornée. Le volume extrait peut être bien supérieur. Limitez taille totale extraite et taille par fichier pendant la lecture. Un petit fichier compressé peut demander beaucoup de stockage et de mémoire ; son poids réseau ne borne pas ces ressources.

Understand this common mistake

Une archive de petite taille ne peut épuiser le disque.

Le volume extrait peut être bien supérieur.

Chemins

Les chemins des entrées doivent rester dans le périmètre d’extraction. Des chemins hostiles peuvent sortir du répertoire prévu. Refusez les chemins absolus et les sorties du répertoire prévu après résolution contrôlée. Examinez aussi liens et formes spécifiques à la plateforme pour éviter qu’une entrée écrive hors du périmètre d’extraction.

Understand this common mistake

Tout chemin fourni par le ZIP est une destination autorisée.

Des chemins hostiles peuvent sortir du répertoire prévu.

Nombre de fichiers

Le nombre d’entrées doit être limité. De nombreuses entrées peuvent consommer des ressources. Bornez entrées, profondeur et opérations, même lorsque chaque fichier est petit. Une archive peut épuiser temps, inodes ou descripteurs sans dépasser une simple limite de taille totale.

Understand this common mistake

Seule la taille du premier fichier détermine le coût total.

De nombreuses entrées peuvent consommer des ressources.

Doublons

L’import doit définir le traitement des doublons. La reprise exige une politique explicite. Définissez si un identifiant existant est refusé, fusionné ou mis à jour. Cette politique doit rester stable entre parties et reprises ; sinon un fractionnement peut créer des doublons ou écraser des réalisations.

Understand this common mistake

Réimporter une partie ne peut jamais répéter un effet.

La reprise exige une politique explicite.

Original conservé

Un original doit être conservé avant transformation. Une copie permet de vérifier et reprendre sans perte. Travaillez sur une copie et conservez l’archive source avant transformation. Vérifiez manifestes et références après reconstruction afin de pouvoir revenir à l’original si un regroupement omet une image.

Understand this common mistake

Découper exige de détruire l’archive source.

Une copie permet de vérifier et reprendre sans perte.

Type réel

Le type déclaré par le client doit être vérifié. La déclaration n’est pas une analyse du contenu. Le nom .zip et le MIME client sont des affirmations. Le parseur et les règles de contenu doivent vérifier format et structure admise avant extraction ou publication des fichiers.

Understand this common mistake

Content-Type application/zip prouve une archive valide.

La déclaration n’est pas une analyse du contenu.

Import privilégié

L’autorisation et le CSRF restent nécessaires sur l’import admin. Le format ne prouve pas les droits de l’acteur. Un formulaire d’administration reste soumis à authentification, droit d’import et protection CSRF adaptée. Une limite de taille ou un ZIP valide n’établit pas l’autorisation de modifier le portfolio.

Understand this common mistake

Une archive valide donne accès à l’administration.

Le format ne prouve pas les droits de l’acteur.

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

# Illustration de découpe binaire uniquement :
split -b 500000 portfolio.zip lab-part-
# L’importeur attend pour chaque envoi une archive ZIP complète.

La commande split découpe seulement le flux binaire de portfolio.zip. L’importeur exige pourtant un ZIP complet à chaque envoi. Reconstituez des archives autonomes à partir des données et dépendances, puis vérifiez leur validité et leur taille multipart estimée avant de les proposer à l’import.

Les octets sont coupés sans reconstruction logique. Le suffixe ne répare pas la structure. Le seuil ne recrée pas les références ou contenus. Il faut reconstruire des archives conformes avec leurs données nécessaires.

Travail pratique : Fractionnez un petit jeu fictif en archives autonomes, puis testez taille réseau, intégrité, chemins et doublons à la réimportation.

Critères de correction : Vérifiez chaque archive avec le lecteur réel, importez toutes les parties dans une base de test isolée et comparez champs et images. Rejouez l’import pour contrôler l’idempotence. Gardez les sources intactes pour comparer les résultats.

PDF : admission, stockage et restitution sont trois décisions

Un nom .pdf et un MIME client application/pdf restent des déclarations. Vérifiez le format admis et sa structure avec des composants adaptés, en bornant taille, temps et ressources du traitement. Aucun scanner unique ne garantit l’absence de tout danger dans un document.

Générez un nom interne indépendant du nom original et stockez hors d’un périmètre exécutable ou publiquement listable. Conservez une relation métier vers le propriétaire. Lors de la restitution, autorisez l’action avant lecture puis servez un type explicite, une disposition adaptée et une politique de cache cohérente avec la confidentialité.

Testez fichier malformé, dépassement, nom de chemin hostile et demande par un autre compte. Vérifiez aussi les routes alternatives de fichiers et les copies temporaires. Un upload correctement refusé ne doit laisser aucun document consultable, tandis qu’un import accepté ne doit pas contourner l’autorisation simplement parce que son URL est opaque.

Points de vigilance : Les métadonnées client ne sont pas fiables et le stockage exécutable augmente le risque. Une extension ne prouve pas le type ni l’innocuité du contenu. La limite de taille ne contrôle ni la nature du fichier ni son exécution ou son accès. Ces contrôles se complètent ; une analyse de contenu adaptée reste utile et aucun scanner ne garantit l’absence de danger.

Reference documentation ↗

Worked example

partie-01.zip
  realisations.json  → sous-ensemble de réalisations
  images/a.png       → uniquement les visuels référencés
partie-02.zip
  realisations.json  → autre sous-ensemble
  images/b.png

Chaque partie possède une structure d’archive complète. Les références du JSON doivent correspondre exactement aux chemins internes attendus par l’importeur.

Practical exercise

Fractionnez un petit jeu fictif en archives autonomes, puis testez taille réseau, intégrité, chemins et doublons à la réimportation.

View a suggested solution

Vérifiez chaque archive avec le lecteur réel, importez toutes les parties dans une base de test isolée et comparez champs et images. Rejouez l’import pour contrôler l’idempotence. Gardez les sources intactes pour comparer les résultats.

Verification checklist

  • Bornes compressées et décompressées.
  • Manifeste autonome par partie.
  • Validation avec l’importeur réel.

Knowledge check

Related lesson: 34. Uploads, ZIP et budgets par couche ↗
Une archive sous la limite réseau est-elle nécessairement sûre à décompresser ?

Reference documentation ↗

Module validation

101 questions, local practice target of 75%. Suggested duration of 150 minutes, with no enforced deadline. Questions and choices are shuffled; corrections appear after submission. The quick lesson check and the final course exam remain separate exercises.

Start or resume the 101 questions →