Wrappers de fichiers et gestionnaires de flux

Comment les wrappers de flux du runtime (surtout les php://, phar://, data:// de PHP) transforment une lecture ou une inclusion de fichier en divulgation de source, désérialisation et exécution de code à distance.

2 min de lecturemis à jour le 13 oct. 2026florianamette1 contributeur
Demander à votre assistant (MCP)Modifier sur GitHub

Les runtimes de langage exposent des wrappers de flux : des pseudo-protocoles qui permettent aux fonctions de fichier ordinaires d'opérer sur des choses qui ne sont pas de simples fichiers. PHP est de loin la cible la plus riche, avec php://, phar://, data://, zip://, et d'autres. Lorsqu'une application passe une entrée influencée par l'attaquant à une fonction de fichier (include, fopen, file_get_contents, getimagesize, copy), ces wrappers transforment ce qui ressemble à une lecture de fichier en divulgation de source, désérialisation ou exécution de code. C'est un problème de couche runtime car la capacité provient du moteur, non de la logique propre à l'application.

Pourquoi c'est important#

Un bug de traitement de chemin qui ne serait autrement qu'une lecture de fichier local limitée devient bien plus lorsque les wrappers sont disponibles :

  • php://filter lit et transforme le contenu des fichiers, en extrayant le code source, et des filtres chaînés peuvent synthétiser du PHP exécutable à partir d'aucun fichier.
  • phar:// désérialise les métadonnées d'archive dès qu'une fonction de fichier touche le chemin, atteignant l'injection d'objet sans appel à unserialize().
  • data:// et php://input fournissent du contenu contrôlé par l'attaquant directement à un include (les deux requièrent allow_url_include=On) ; lorsque ce réglage est désactivé, les chaînes php://filter atteignent toujours l'exécution de code sans dépendance de configuration.

Pages#

Références#

  • PHP manual: supported protocols and wrappers
  • PortSwigger Web Security Academy: File path traversal, LFI