envoi de fichiers sécurisés

peuTimporte
Invité n'ayant pas de compte PHPfrance

13 mars 2009, 17:14

Bonjour,
Afin de sécuriser l'upload de fichiers vers mon serveur j'essaye de m'assurer qu'il n'y ait pas de code PHP dans le fichier en question en lisant chaque ligne du fichier uploadé avec fgets() et en recherchant la chaine <?php avec stristr(). Le probleme est que fgets evalue la ligne: <?php n'est donc pas retourné et échappe à ma vérification avec stristr().

Le fichier à le contenu suivant:
premiereligne
deuxiemeligne<?php echo "hacked"; ?>

Ce que je recupère avec fgets est:
premiereligne
deuxiemeligne

Existe-t-il une fonction quit lit un fichier sans interpréter la ligne?

merci
peuTimporte

Eléphanteau du PHP | 13 Messages

13 mars 2009, 17:24

Logiquement il n'interprète pas, il suffit de ne pas mettre l'url complet du fichier, juste l'emplacement sur le serveur, et normalement sa devrait aller!

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

13 mars 2009, 18:47

fgets n'évalue ni n'exécute la ligne qu'il retourne (fort heureusement). Il se contente simplement de lire une ligne du fichier et de la retourner....

A mon avis ton problème est simplement lié à la façon dont tu contrôle le contenu retourné par fgets. En effet, si tu utilises simplement un echo pour afficher le résultat dans ton navigateur, tu auras bien le code source de la page "deuxiemeligne<?php echo "hacked"; ?> ", mais à l'écran le navigateur n'affichera que "deuxiemeligne", le reste de la chaine étant considéré comme une balise html qui n'est donc pas affichée ;)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...