begin process at 2012 05 27 21:23:12
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Fichier / Disque

 > FORCER LE TÉLÉCHARGEMENT D'UN FICHIER SIMPLEMENT

FORCER LE TÉLÉCHARGEMENT D'UN FICHIER SIMPLEMENT


 Information sur la source

Note :
4 / 10 - par 1 personne
4,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Fichier / Disque Classé sous :forcer, téléchargement, fichier, simplement, fonctionnel Niveau :Débutant Date de création :05/01/2008 Date de mise à jour :09/05/2009 23:27:08 Vu :11 492

Auteur : sean1305

Ecrire un message privé
Commentaire sur cette source (16)
Ajouter un commentaire et/ou une note

 Description

Ce script permet de forcer le téléchargement d'un fichier.

La variable $exts_allowed est le tableau des extensions autorisées. Ne pas mettre les points.
Exemple valide : array ( 'mp3' , 'txt' );
Exemple invalide : array ( '.mp3' , '.txt' );

Source

  • <?php
  • // Extensions des fichiers autorisés à être téléchargés, à modifier. Sans les points.
  • $exts_allowed = array ( 'txt' , 'htm' , 'html' , 'phtml' , 'xhtml' , 'dhtml' );
  • //----------------------------------------------------
  • // MESSAGES D'ERREUR
  • //----------------------------------------------------
  • $msg [ 'no_file_to_dl' ] = 'Aucun fichier à télécharger.';
  • $msg [ 'file_doesnt_exist' ] = 'Le fichier que vous tentez de télécharger n\'existe pas.';
  • $msg [ 'file_not_allowed' ] = 'Vous ne pouvez pas télécharger ce fichier.';
  • if ( isset ( $_GET [ 'file' ] ) )
  • {
  • $file = trim ( $_GET [ 'file' ] );
  • if ( @ file_exists ( $file ) )
  • {
  • $infos = pathinfo ( $file );
  • if ( in_array ( $infos [ 'extension' ] , $exts_allowed ) )
  • {
  • @ header ( 'Content-Transfer-Encoding: binary' );
  • @ header ( 'Content-Disposition: attachment; filename="' . str_replace ( ' ' , '_' , $file ) . '"');
  • @ header ( 'Content-Length: ' . @ filesize ( $file ) );
  • @ readfile ( $file );
  • }
  • else
  • {
  • echo $msg [ 'file_not_allowed' ];
  • }
  • }
  • else
  • {
  • echo $msg [ 'file_doesnt_exist' ];
  • }
  • }
  • else
  • {
  • echo $msg [ 'no_file_to_dl' ];
  • }
  • ?>
<?php

// Extensions des fichiers autorisés à être téléchargés, à modifier. Sans les points.
$exts_allowed = array ( 'txt' , 'htm' , 'html' , 'phtml' , 'xhtml' , 'dhtml' );


//----------------------------------------------------
// MESSAGES D'ERREUR
//----------------------------------------------------

$msg [ 'no_file_to_dl' ]      =  'Aucun fichier à télécharger.';
$msg [ 'file_doesnt_exist' ]  =  'Le fichier que vous tentez de télécharger n\'existe pas.';
$msg [ 'file_not_allowed' ]   =  'Vous ne pouvez pas télécharger ce fichier.';


if ( isset ( $_GET [ 'file' ] ) )
{
	$file = trim ( $_GET [ 'file' ] );
	
	if ( @ file_exists ( $file ) )
	{
		$infos = pathinfo ( $file );
		
		if ( in_array ( $infos [ 'extension' ] , $exts_allowed ) )
		{
            @ header ( 'Content-Transfer-Encoding: binary' );
            @ header ( 'Content-Disposition: attachment; filename="' . str_replace ( ' ' , '_' , $file ) . '"');
            @ header ( 'Content-Length: ' . @ filesize ( $file ) );
            @ readfile ( $file );
		}
		else
		{
			echo $msg [ 'file_not_allowed' ];
		}
	}
	else
	{
		echo $msg [ 'file_doesnt_exist' ];
	}
}
else
{
	echo $msg [ 'no_file_to_dl' ];
}


?>

 Conclusion

Voila, pour forcer le téléchargement il faut rajouter la donnée GET file, exemple mon fichier se nomme download.php, il me suffit de taper :

http://.../download.php?file=Fichier_A_Telechar ger.extension


 Historique

07 janvier 2008 12:10:07 :
Sécurité renforcée.
07 janvier 2008 12:11:22 :
..
09 mai 2009 23:27:09 :
Réécriture de ce petit code.

 Sources de la même categorie

SUPPRESSION AUTOMATIQUE DES FICHIERS RAW ORPHELINS APRÈS UN ... par malokaff
UPLOADER DES FICHIER DANSUN DOSSIER, SÉCURISÉ AVEC MOT DE PA... par raizzo
COMPTEUR DE VISITES SUR FICHIER par pierreSabatier
FONCTION RECURSIVE DE DOSSIERS par tefa24600
Source avec Zip CONVERSION DES UNITÉS INFORMATIQUE (O, KIO, MIO, GIO, TIO...... par genetApt151

 Sources en rapport avec celle ci

CLASSE DE GESTION DE "VARIABLES GLOBALES D'ENVIRONNEMENT" par pifou25
UPLOADER DES FICHIER DANSUN DOSSIER, SÉCURISÉ AVEC MOT DE PA... par raizzo
COMPTEUR DE VISITES SUR FICHIER par pierreSabatier
PROTÉGEZ VOS LIENS DE TÉLÉCHARGEMENT PAR MOT DE PASSE ET/OU ... par unlien
Source avec Zip Source avec une capture FORCER UN TÉLÉCHARGEMENT (REPRISE DU CODE DE "EJBYE7"), ON S... par michmichman

Commentaires et avis

Commentaire de webdeb le 05/01/2008 12:41:47 4/10

Ton code est super dangereux... Tu as tenté de restreindre le téléchargement de certains fichiers (.php, .inc...) mais si mes fichiers porte les extensions suivantes :

* .php4, .php5, .php3
* .ini
* .log
* ...

Bref je pourrais quand même accéder à des fichiers tous aussi sensibles que les fichiers php de ton appli.

En plus ton code me permet d'aller récupérer des fichiers qui se trouvent en dehors de la racine web. Il suffit pour moi d'essayer de deviner ce qu'il se passe au dessus de ton répertoire www pour aller y récupérer des fichiers de configuration de PHP ou MySQL par exemple.

Sache également que ta façon de récupérer une extension est loin d'être efficace puisqu'elle dépend de la taille de l'extension (que tu as fixé à 4 caractères). PHP propose la fonction native pathinfo() qui te permet de récupérer l'extension sans te soucier de sa longueur.

Il faudrait également que tu vérifies que dans le nom du fichier php passé dans l'url, qu'il n'y ait pas les caractères ".." qui te permettent de remonter d'un niveau.

Enfin, dans ce genre de script, il est bon de forcer le téléchargement de fichiers qui se trouvent uniquement dans un répertoire donné. En forçant en dur par exemple un répertoire nommé "downloads_publics", on s'assure que le script ira chercher uniquement dans ce répertoire si le fichier existe. Dans le cas contraire, on ne pourras pas télécharger un fichier qui se trouve en dehors de ce répertoire.

++

Commentaire de sean1305 le 05/01/2008 19:25:18

Lol j'ai oublié de mettre les extensions .phpX.

Bref sinon quand j'ai dit "simplement" ben c'est simplement.

Commentaire de sean1305 le 07/01/2008 12:17:07

A ma connaissance les extensions .ini ou .log ne sont pas des extensions de PHP, uniquement celles-ci :
.php[3|4|5]
.inc
.phtml

Bien sur on peut créer ses extensions personnalisées si on est l'administrateur du serveur Apache.

Commentaire de webdeb le 07/01/2008 14:48:03

>> A ma connaissance les extensions .ini ou .log ne sont pas des extensions de PHP, uniquement celles-ci :

Oui ce ne sont pas pas des extensions de PHP et alors ? Avec ton système, je peux récupérer les fichiers de configs du serveur. Ces fichiers regorgent d'informations utiles pour un hacker...

Commentaire de sean1305 le 07/01/2008 16:45:17

Encore faudrait-il connaître le nom de ces fichiers et sur quel type de serveur (LINUX dans 75% des cas) est hébergé le site ...

Et si tu peux bien fais-le XD

Commentaire de sean1305 le 07/01/2008 16:47:41

J'oublais quels type d'informations dit un "hacker", pourrait récupérer ?

De nos jours les serveurs sont sécurisés ...

Commentaire de econs le 07/01/2008 17:01:04 administrateur CS

En récupérant les fichiers de logs, on peut imaginer qu'il pourra récupérer des infos sensibles. Imagine un peu que CodeS-SourceS soit codé en PHP, que ta page soit disponible sur le server.
En récupérant les logs, on pourrait y voir des choses du style "L'utilisateur toto/mdptoto s'est connecté". => Et pan ! des infos personnelles récupérées.
Tu pourrais y trouver l'IP de la personne qui s'est connectée, tout ce qu'elle a fait sur le site, retrouver son email ...

Et là, le server a beau être sécurisé, tu récupères les infos que tu as trouvées, et tu te loggues avec. Ca va passer.

Donc les logs ne doivent JAMAIS pouvoir être téléchargeables. Dès qu'un service possède une base de donnée pour ses clients, tu trouves inévitablement des infos personnelles qui trainent dans les logs.

Commentaire de webdeb le 07/01/2008 19:42:14

>> De nos jours les serveurs sont sécurisés ...

Ah bon tu crois ? tu es bien naïf dis donc ^^ Il n'y a que dans les films américains que les serveurs sont ultra sécurisés lol

Commentaire de sean1305 le 08/01/2008 17:28:50

Non, je ne suis pas naïf, tu ne me connais pas donc ...

Cela dit c'est vrai que y'a que dans les films ricains (mais non je suis pas raciste ! XD) où les serveurs et tout ça sont ultra sécurisés mdr.

Mais il existe quand même des programmes très puissants pour sécuriser des serveurs, comme le pare feu Phénix (qui supprimerait toutes les donneés d'un ou de disque(s) dur(s) si une intrusion importante serait détectée).

Commentaire de webdeb le 08/01/2008 17:39:25

Sache une chose : la faille de sécurité se trouve entre le clavier et la chaise ^^

Commentaire de sean1305 le 09/01/2008 13:19:02

Et les nuages dans le ciel ...

Commentaire de hztm82 le 14/02/2008 16:14:19

Plutôt que d'exclure certains type de fichier, il serait plus prudent de n'autoriser que certains. (zip, jpg...) et effectivement, avec un répertoire en dur on est tranquille.

Commentaire de saadi2009 le 01/05/2009 19:45:46

Merci bien pour le code, il est simple et fiable;
comment je cache le paramètre d'envoie parle  href?
puisque les propriété de téléchargement afiche l'instruction complete
comme suite:
http://www.exemple.com/dossier/download.php?variable=fichier.gif

Commentaire de sean1305 le 09/05/2009 23:29:43

Merci pous vos commentaires (qui datent lol).

A l'époque j'étais un noob de PHP, maintenant je maitrise mais je suis pas un encore un professionel.

Commentaire de sean1305 le 09/05/2009 23:30:43

saadi2009 je n'ai pas très bien compris ta question.

Tu veux dire comment ne pas montrer le "fichier.gif" (comme dans ton exemple) ?

Commentaire de tsioryarivony le 13/01/2012 19:34:46

mon souci c'est ke,le fichier dont je veut telecharger est ke je ne connait pas son nom carps je les ai renomé.comment faire pour les telechargers?

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Forcer un téléchargement plutôt que l'ouverture d'un fichier [ par Adagyo ] Salut,Je voudrais forcer mes utilisateur à télécharger un fichier (un fichier .csv dans mon cas) plutôt qu'il s'ouvre avec excel dans le navigateur.Co Forcer le téléchargement et fermer la fenêtre !! [ par djagger ] Lussss !Voici mon pb :je force le téléchargement d'un fichier :&lt;?php$file = "fichier.txt";// téléchargement du fichierheader("Content-Type: applica forcer le téléchargement et espaces dans le fichier [ par arginine ] Bonjour,J'utilise le bout de code suivant pour "forcer le t&#233;l&#233;charmenet d'un fichier": Fichier dowload.php &lt;?phpheader("Content-type: app Forcer le téléchargement d'un fichier [ par hood042 ] Bonjour, je voudrais forcer le téléchargement d'un fichier comme sur ce site : http://dimi30a.olympe-network.com/free.phpPouvez-vous m'aider ? Merci p forcer le téléchargement d'un MP3 [ par lawebmachine ] Bonjour Je cherche à forcer le téléchargement des MP3 sur le site que je fais. Seulement ça me met un message d'erreur. Qui peut m'aider ? voici le PHP : téléchargement *.zip [ par wolfoxrocks ] Bonjour à toutes et à tous, je me permet de vous embêter un ch'tit peu pour vous demander un coup de pouce.Avant tout je ne maîtrise pas le php, mais Forcer à télécharger un fichier avec onClick [ par raskar97one ] Bonjour à tous,Dans mon site j'utilise un format de fichier peu connu.(stbe)Lorsque je met un lien pour télécharger celui-ci, firefox essaye de le lir Lancer le téléchargement d'un .exe [ par N3N3SS ] Bonjour tout le monde, J'ai fini de créer mon site, j'y propose le téléchargement d'un exécutable, calculette de windows pour les tests. J'ai dans m Téléchargement à la volée [ par BananaTree ] Bonjour, je n'arrive pas à forcer le téléchargement d'un fichier texte généré à la volée. je ne souhaite pas que ce fichier soit enregistré sur le se Forcer le téléchargement [ par djimson ] Bonjour, De l'aide pour ce script: En fait, je veux forcer le téléchargement des fichiers envoyer par FTP dans le répertoire COURS. Alors, j'arrive à


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,374 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales