CLASSE D'UPLOAD DE FICHIER PHP

inwebo Messages postés 380 Date d'inscription lundi 12 novembre 2007 Statut Membre Dernière intervention 23 octobre 2014 - 10 mai 2010 à 14:35
GillesWebmaster Messages postés 496 Date d'inscription mercredi 30 juin 2004 Statut Membre Dernière intervention 29 juillet 2009 - 16 mai 2010 à 17:11
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/51739-classe-d-upload-de-fichier-php

GillesWebmaster Messages postés 496 Date d'inscription mercredi 30 juin 2004 Statut Membre Dernière intervention 29 juillet 2009 1
16 mai 2010 à 17:11
joli boulot :-D
inwebo Messages postés 380 Date d'inscription lundi 12 novembre 2007 Statut Membre Dernière intervention 23 octobre 2014
12 mai 2010 à 13:48
Pour les commentaires je pensais plus aux personnes qui utilisent un I.D.E. pour avoir l'autocompletion d'active. Mais aussi pour le dev', lorsque on laisse de côté un code pendant quelques temps de pouvoir le modifié sans trop se casser la tête.

++
beejeridou Messages postés 35 Date d'inscription lundi 10 avril 2006 Statut Membre Dernière intervention 21 mai 2010
12 mai 2010 à 12:10
J'ai mis dans ma classe les type-mime les plus courants, à chacun d'adapter cette liste selon ses besoins et c'est d'ailleurs pour cela que j'ai également fourni une liste de type-mime. Une fois que cela est fait, la déclaration se fait en une seule ligne, pour chaque upload.

$upload->setType("jpg/doc/xls");

Pour ce qui est des commentaires, j'ai commenté l'exemple d'utilisation. Les gens qui veulent utiliser cette classe peuvent me poser toutes les questions qu'ils veulent au besoin.
inwebo Messages postés 380 Date d'inscription lundi 12 novembre 2007 Statut Membre Dernière intervention 23 octobre 2014
12 mai 2010 à 10:53
Bonjour,

Je n'aurais pas fait la vérification du type-mime comme cela. Tout est codé en dur dans votre classe, admettons que je veuille envoyé un .rar et que je ne veux pas ajouter de ligne de code dans la class. Comment faire ?

Je mettrais en paramètre lors de l'instanciation de la class un tableau de type-mime autorisés puis de boucler sur ce tableau pour vérifier si le fichier est autorisé. C'est un peu plus souple et évolutif je pense que tout en "dur".

Deuxième chose, il faudrait commenter également votre code : j'utilise pour référence la documentation du zendframwork http://framework.zend.com/manual/fr/coding-standard.html

Cordialement
beejeridou Messages postés 35 Date d'inscription lundi 10 avril 2006 Statut Membre Dernière intervention 21 mai 2010
11 mai 2010 à 14:55
Au fait, je file un lien pour gérer des extensions moins courantes pour ce fameux type-mime:

http://fr.selfhtml.org/divers/typesmime.htm
beejeridou Messages postés 35 Date d'inscription lundi 10 avril 2006 Statut Membre Dernière intervention 21 mai 2010
11 mai 2010 à 14:53
Voilà, j'ai fait la vérification également sur le type-mime.

Cependant, effectivement, comme le disait si bien inwebo, le type-mine n'est pas fiable.

Exemple: j'ai renommé un fichier xls en .jpg, et le type-mime retourné était bien "application/vnd.ms-excel"... Le fichier a été uploadé (meme invalide mais uploadé quand meme).

J'ai fais des recherches sur le net et je ne vois pas de solutions fiable à adapter de manière native.

Si vous avez une solution à donner je suis preneur.
beejeridou Messages postés 35 Date d'inscription lundi 10 avril 2006 Statut Membre Dernière intervention 21 mai 2010
11 mai 2010 à 14:03
Merci, je planche dessus, y a pas de soucis, je fais la modif de la classe dans l'aprem.
xstyled Messages postés 38 Date d'inscription jeudi 18 mai 2006 Statut Membre Dernière intervention 17 février 2009
11 mai 2010 à 12:47
Si il n'y a que le traitement de l'extension, on peut facilement injecter du code dans le commentaire de l'image, et l'exécuter sur le serveur du genre image.gif%00 (dans le path bien sur), donc après, il faut protéger l'url ...
Autant faire en sorte que le script d'upload soit le plus sécurisé possible pour simplifiez le code dans son utilisation.
inwebo Messages postés 380 Date d'inscription lundi 12 novembre 2007 Statut Membre Dernière intervention 23 octobre 2014
11 mai 2010 à 10:31
La vérification du type de fichier ne devrait fait PAS se faire sur son extension ! Même le type-mime n'est pas sûr à 100%, mais c'est une meilleur solution que l'extension.
beejeridou Messages postés 35 Date d'inscription lundi 10 avril 2006 Statut Membre Dernière intervention 21 mai 2010
10 mai 2010 à 15:29
Penses-tu alors que la vérification de l'extension du fichier faite comme je l'ai fais peut avoir une faille de sécurité?

Je peux rajouter dans l'expression régulière des fichiers strictements interdits par exemple? (lol le flemmard)
Sinon je modifie tout ca ce soir et fournirai une vérif sur le type/mime.

Merci pour tes infos.
inwebo Messages postés 380 Date d'inscription lundi 12 novembre 2007 Statut Membre Dernière intervention 23 octobre 2014
10 mai 2010 à 15:07
'je sais qu'il ne prend pas toutes les extensions(ex: CSV - XLS ??) ' ?

Les mime-types sont normés.
C'est peut être prendre le problème à l'envers que de développer pour l'exception et ensuite de fixer les problèmes.

En ce qui concerne le pjpeg, qui est un mime-type inconnu à part chez microsoft, je te conseil la lecture (en anglais) de : http://www.evolve.co.nz/how-to-fix-a-pjpeg-image-upload-error.html , le 'p' serait pour 'protected'jpeg et non pas progressive, noté le conditionnel, si vous avez d'autre infos je suis à l'écoute.
beejeridou Messages postés 35 Date d'inscription lundi 10 avril 2006 Statut Membre Dernière intervention 21 mai 2010
10 mai 2010 à 14:52
Oui, tu as tout à fait raison sur l'utilisation du type mime. J'ai hésité à l'employer mais je sais qu'il ne prend pas toutes les extensions(ex: CSV - XLS ??) et pour les images, IE prend le type pjpeg et pgif (ajout du "p" devant).
C'est pour moi trop bizarre donc je n'ai pas utilisé ca. 8)
inwebo Messages postés 380 Date d'inscription lundi 12 novembre 2007 Statut Membre Dernière intervention 23 octobre 2014
10 mai 2010 à 14:35
Bonjour,

Après un rapide survol de cette class, il y a un point qui pourrait être amélioré le test sur l'extension du fichier. Un test sur le mime-type plutôt que sur l'extension du fichier serait plus approprié, voir $_FILES['userfile']['type'].

J'ai également fait une petite class qui réponds au même besoin, mais j'ai rajouté un test pour comparer les poids (en o) du fichier à envoyé et du fichier reçu.

Voilà bonne continuation.

++
Rejoignez-nous