Blog of ChristoPHPe !
Bienvenue sur mon Blog !

Blog of ChristoPHPe !

[PHP] Forcer le téléchargement d’un Fichier

29 juillet 2008 à 19:25, par Christophe

Bonsoir !

Vous disposez par exemple d’un site photo ? et que vous voulez que quand l’utilisateur clique sur un lien, la photo se télécharge et ne s’affiche pas dans son navigateur ? c’est possible !

Voici le code tout chaud :

function download($file) {
    header('Content-Type: application/octet-stream');
    header('Content-Disposition: attachment; filename='.basename($file) );
    header('Accept-Ranges: bytes');
    header('Content-Length: '.filesize($file) );
    readfile($file);
} 
 
if( isset($_GET['f']) && !empty($_GET['f']) ){
 
	switch($_GET['f']){
		case 'fichier_01.jpg': // Fichier 01
			$file = 'fichier_01.jpg';
		break;
 
		case 'fichier_02.jpg': // Fichier 02
			$file = 'fichier_02.jpg';
		break;
 
		case 'programme.txt': // Fichier 03
			$file = 'programme.txt';
		break;
 
		// etc...
 
		default:
			$file = '';
		break;
	}
 
	if( !empty($file) ){
		download($file);
	} else {
		echo 'Erreur !';
	}
 
}

Voilà ajoutez des

case '...':
	$file = '...';
break;

à volonté !

Mais par contre, ne faites JAMAIS ça :

function download($file) {
    header('Content-Type: application/octet-stream');
    header('Content-Disposition: attachment; filename='.basename($file) );
    header('Accept-Ranges: bytes');
    header('Content-Length: '.filesize($file) );
    readfile($file);
}
download($_GET['f']);

Pourquoi ? parce-que ce code dispose d’une faille, un utilisateur mal intentionné pourra très très facilement télécharger n’importe quel fichier sur votre serveur, récupérer le fichier de fonctions ou de config, il saura votre mot de passe MySQL, puis, il se connectera, supprimera la base, le site… enfin tout quoi…

Voilà ! soyez tout de même prudent avec ce code et essayez d’hacker votre site, sans aller jusqu’au bout bien sûr ^^

Laisser un commentaire

Nom

Adresse e-Mail

Site Web

 | 




-->