Derniers journaux de nap :
- [16/03@15:39] Interview du responsable stratégie pour la division plate-forme d'entreprise chez Microsoft France à propos de GNU/Linux
- [15/03@21:00] Fonctionnement des polices sous gecko
- [10/03@19:51] Troll d'anthologie
- [27/02@09:42] une arme contre l'omniprésence d'Internet Explorer : les FAI
- [10/02@13:31] meta-troll
- [09/02@15:13] port ide raid et option du noyau
- [25/01@04:33] lancer une deuxieme fenetre firebird + autres tru
- [24/01@20:09] super, la recherche sur google par firebird
- [23/01@12:49] Formats de fichiers du prochain MS Office
- [21/12@22:14] Editeur de texte gérant le ftp
- [10/12@10:45] Question sur XSLT
- [06/12@22:30] Au delà du réel
- [03/12@09:36] cherche un format de fichier structuré et une api qui va avec
- [02/11@13:42] mozilla : style classic et gtk2
- [27/10@09:08] distribution live avec support du sagem fast 800 direct out of the box
- [10/10@14:14] Microsoft dépose un brevet sur l'info-qui-dit-que-le-copain-ecrit-un-truc dans MSN
- [03/10@19:21] un APN qui roxe des belettes
- [03/10@14:04] en réaction à jcs
- [03/10@10:22] ras le bol de la fortune du bas
- [01/10@19:32] écrans kde dans alias :-)
Journal : téléchargement contrôlé de fichiers avec apache2 et php4
Posté par Nap () le 19 mars 2004sur le site de ma boite, pour proposer un fichier au telechargement de manière sécurisée, on appelle un fichier telecharger.php avec le nom du fichier en parametre, fichier qui est situé dans un répertoire auquel le serveur web n'a pas accès. Le script php ouvre le fichier en lecture et écrit son contenu dans la sortie vers le serveur http, de cette manière :
$nom=$HTTP_GET_VARS["nom"];
$fichier=fopen("/files/$nom","rb");
header("Content-Type: application/octetstream");
header("Content-Disposition: filename=$nom");
fpassthru($fichier);
Sur certains fichiers, le script échoue 4 fois sur 5
Quelqu'un connait-il des raisons possibles d'un tel comportement ?
plus généralement, que pensez-vous de ce code ? quelle est la meilleure méthode pour ce genre de manipulation ?
des problèmes de charge peuvent-ils empécher php d'ouvrir un fichier ?
pour info, j'utilise une fedora core 1 à jour
> Lire le journal (20 commentaires, moyenne: 1,7).
Re: téléchargement contrôlé de fichiers avec apache2 et php4
autre solution :
$nom=$HTTP_GET_VARS["nom"];
header("Content-type: application/octetstream");
header("Content-disposition: filename=$nom");
readfile($fichier);
Damien
Re: téléchargement contrôlé de fichiers avec apache2 et php4
telechargement de manière sécurisée
[...]
$fichier=fopen("/files/$nom","rb");
Sécurisée?
http://example.com/telecharger.php?nom=../etc/passwd(...)
Il faut filtrer '/' et '..' (au moins) pour que ce soit sécurisé (même si ton serveur est chrooté, sinon tu peux toujours choper des sources php par ce biais, possiblement avec un mot de passe de base dedans, etc).
Sinon, c'est "application/octet-stream", peut-être que ça peut aider.
-
[^]Re: téléchargement contrôlé de fichiers avec apache2 et php4
Posté par Nap () le 19/03/2004 à 15:33. (lien). Évalué à 1.mais c'est pas bête tout ça :))
merci à tous les deux, je vais filer ça au webmaster :)-
[^]Re: téléchargement contrôlé de fichiers avec apache2 et php4
Posté par Benjamin G. ( Prae ) (page perso, ) le 19/03/2004 à 16:09. (lien). Évalué à 1./me se tape le front avec la main
donne nous l'url tient au passage >-)-
[^]Re: téléchargement contrôlé de fichiers avec apache2 et php4
-
-
Re: téléchargement contrôlé de fichiers avec apache2 et php4
$nom=$HTTP_GET_VARS["nom"];
$fichier=fopen("/files/$nom","rb");
Tu fais pas de vérifications sur le contenu de $nom, au cas où ?
Sur certains fichiers, le script échoue 4 fois sur 5
Fais des tests avec curl pour débugger ?
-
[^]Re: téléchargement contrôlé de fichiers avec apache2 et php4
Posté par Nap () le 19/03/2004 à 15:43. (lien). Évalué à 1.Tu fais pas de vérifications sur le contenu de $nom, au cas où ?
en fait on est en train de tester tout ça, et après de toute manière on vérifie forcément le $nom, vu qu'on vérifie que l'utilisateur y a bien accès
mais avant tout on teste la méthode
Re: téléchargement contrôlé de fichiers avec apache2 et php4
header("Content-Type: application/octetstream");
Euh, tu voulais dire octet-stream? Mais bon, ça change rien à l'affaire. QU'entends-tu par 'le script échoue'? 'DOcument contains no data'?
Tiens, je roupille sur ma touche Maj moi...
En fait, Bernardo n'était pas muet; c'est Zorro qui était sourd.
-
[^]Re: téléchargement contrôlé de fichiers avec apache2 et php4
Posté par cumulus () le 19/03/2004 à 15:46. (lien). Évalué à 1.Je crois que dans le cas d'un échec, le client ne sait pas quoi faire du fichier, du coup pour une image png par exemple, il va t'afficher de l'ascii dans ton navigateur.
Ne faudrait-il pas déterminer le type de fichier (doc, jpg, ..) avant d'envoyer un header adapté ?-
[^]Re: téléchargement contrôlé de fichiers avec apache2 et php4
Posté par Lol Zimmerli (Jabber id, page perso, ) le 19/03/2004 à 16:09. (lien). Évalué à 1.Normalement pas, non. Apache devrait savoir, s'il ne sait pas quoi faire du fichier, te l'envoyer en 'save as..'.
Ex: http://www.lzi.ch/picts/(...)
clique sur le anyb.glup (c'est un cp du png).
Chez moi, il me propose de le sauver sur le DD, alors que dans le httpd.conf, j'ai:
DefaultType text/plain
Non?--
En fait, Bernardo n'était pas muet; c'est Zorro qui était sourd.-
[^]Re: téléchargement contrôlé de fichiers avec apache2 et php4
Posté par cumulus () le 19/03/2004 à 20:58. (lien). Évalué à 1.Sous Mozilla 1.5 il me l'affiche direct en ascii :
http://cumulus.nerim.net/divers/glub.png(...)
Ca dépend peut-être du navigateur alors ?!-
[^]Re: téléchargement contrôlé de fichiers avec apache2 et php4
Posté par Lol Zimmerli (Jabber id, page perso, ) le 22/03/2004 à 10:28. (lien). Évalué à 1.Si ton navigateur ne peut pas afficher le .glup, c'est une chose; mais qu'il ne puisse pas afficher le PNG, alors c'est _ton_ navigateur qui a un problème!
--
En fait, Bernardo n'était pas muet; c'est Zorro qui était sourd.
-
-
-
-
[^]Re: téléchargement contrôlé de fichiers avec apache2 et php4
Posté par Nap () le 19/03/2004 à 16:07. (lien). Évalué à 1.en fait sous mozilla il ne se passe absolument rien, après un furtif sablier, et sous IE, du bouton droit + enregistrer sous, il y a une erreur du genre "le serveur n'a rien répondu"
-
[^]Re: téléchargement contrôlé de fichiers avec apache2 et php4
Posté par Lol Zimmerli (Jabber id, page perso, ) le 19/03/2004 à 16:12. (lien). Évalué à 2.Essaie de remplacer successivment le 1er puis que le 2èm 'header' par un 'exit':
$nom=$HTTP_GET_VARS["nom"];
$fichier=fopen("/files/$nom","rb");
exit("Content-Type: application/octetstream");
header("Content-Disposition: filename=$nom");
fpassthru($fichier);
puis
$nom=$HTTP_GET_VARS["nom"];
$fichier=fopen("/files/$nom","rb");
header("Content-Type: application/octetstream");
exit("Content-Disposition: filename=$nom");
fpassthru($fichier);
Tu devrais pouvoir contrôler que les headers sont bien construits--
En fait, Bernardo n'était pas muet; c'est Zorro qui était sourd.-
[^]Re: téléchargement contrôlé de fichiers avec apache2 et php4
Posté par Hardy Damien (page perso, ) le 19/03/2004 à 16:14. (lien). Évalué à 1.C'est pas idiot en l'occurence je crois me souvenir que PHP construit le header a l'envers donc mettre p.e. le Content-Type apres le Content-Disposition dans le source.
Dam
-
-
Re: téléchargement contrôlé de fichiers avec apache2 et php4
-
[^]Re: téléchargement contrôlé de fichiers avec apache2 et php4
Re: téléchargement contrôlé de fichiers avec apache2 et php4
La bonne manière de faire pour forcer un téléchargerment de fichier (avec l'ouverture de la boite de dialogue "enregistrer sous" dans le navigateur)
header("Content-type: application/force-download" );
header('Content-disposition: attachment; filename="'. $ficname.'\";');
header("Content-Description: File Transfert");
header("Content-Transfer-Encoding: binary");
header("Pragma: no-cache");
header("Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0");
header("Expires: 0");
header("Content-Length: ".filesize($ficname));
flush();
//envoi du fichier proprement dit
readfile($ficname);
exit;
ça fonctionne avec tout navigateur en principe
-
[^]Re: téléchargement contrôlé de fichiers avec apache2 et php4
Posté par Laurent J (page perso, ) le 19/03/2004 à 16:47. (lien). Évalué à 3.j'ai oublié de précisé :
$ficname = le nom du fichier sur le système, avec eventuellement son chemin...
et en fait, la deuxième ligne est fausse. on indique pas $ficname (surtout si il contient un chemin, mais le nom sous lequel on veut qu'il soit enregistré sur la machine de l'utilisateur
header('Content-disposition: attachment; filename="'. $ficnametosave.'\";');
on peut donc avoir :
$ficnametosave='toto.sxi';
et
$ficname = '/path/to/real/file/ab15fs21';-
[^]Re: téléchargement contrôlé de fichiers avec apache2 et php4
-

Les journaux sont destinés à des informations qui ne sont pas suffisamment intéressantes
pour être validées en dépêche (sinon n'hésitez pas à proposer votre information en
dépêche), qui sont sans rapport avec Linux ou le libre, ou simplement pour donner votre
avis. Si vous désirez poser une question, merci d'utiliser 

Cette discussion est archivée, il n'est plus possible de laisser des commentaires.
Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.