FORUM Tom's Hardware » Programmation » PHP & MySQL & ASP » [PHP] Faille dans mon code ! (telecharger.php)
 

[PHP] Faille dans mon code ! (telecharger.php)

Il y a 158 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici
Ajouter une réponse



 Mot :   Pseudo :  
 
Bas de page
Auteur
 Sujet : [PHP] Faille dans mon code ! (telecharger.php)
 
Plus d'informations

Bonjour, je vous explique mon probléme, alors j'ai trouver sur internet un script php pour comptabiliser les téléchargements.
Comme ca, il sufit de taper telecharger.php?fichier=icilenomdufichier.wmv
 
Le script va chercher les fichiers dans un dossier choisis au préalable. Mais seulement le problème est celui-ci :
Si quelqu'un de mal intentioné veut télécharger mes fichiers php dans d'autres répertoires il lui suffit de faire ceci par exemple
telecharger.php?fichier=../../index.php
 
 :??:  
Je ne sais pas quoi changer dans le code pour empecher ça, je suis vraiment embeté par ceci. Si quelqu'un a une idée de comment faire ça serait très simpa :)
 
Voici le code source de mon fichier telecharger.php
 

Code :
  1. ### Script configuration
  2. $conf['host'] = 'mmmmmmmmmm';
  3. $conf['base'] = 'mmmmmmm';
  4. $conf['login'] = 'mmmmm';
  5. $conf['password'] = 'mmmm';
  6. // Path of the files;
  7. $path = "/homepages/htdocs/downloads/";
  8. function download($chemin,$fichier){
  9.     $length = filesize("$chemin/$fichier" );
  10.     header("Content-Type: application/force-download; name=\"$fichier\"" );
  11.     header("Content-Transfer-Encoding: binary" );
  12.     header("Content-Length: $length" );
  13.     header("Content-Disposition: attachment; filename=\"$fichier\"" );
  14.     header("Expires: 0" );
  15.     header("Cache-Control: no-cache, must-revalidate" );
  16.     header("Pragma: no-cache" );
  17.     readfile("$chemin/$fichier" );
  18. }
  19. function err_msg($text) {
  20.     $out = '<center>'."\n";
  21.     $out .= '<br><br><br>'."\n";
  22.     $out .= '<font face="Arial, Helvetica" color="#D20000" size="2"><b>'.$text.'</b></font>'."\n";
  23.     $out .= '</center>';
  24.     die($out);
  25. }
  26. $file = ( isset($_GET['file']) && $_GET['file']!='' ) ? $_GET['file'] : null;
  27. $request = "select * FROM files WHERE nom LIKE '$file'";
  28. if(!$file){
  29.     err_msg('Spécifiez un fichier <br>('.$_SERVER['PHP_SELF'].'?file=monfichier)');
  30. }elseif(!is_file($path.$file)){
  31.     err_msg('Fichier introuvable');
  32. }
  33. $date = date("Y-m-d H:i:s" );
  34. ### Is the file already in the db ?
  35. $db = mysql_connect($conf['host'], $conf['login'], $conf['password']);
  36. mysql_select_db($conf['base'],$db);
  37. $req = mysql_query($request);
  38. $in_db = @mysql_num_rows($req);
  39. ### The file has not been downloaded yet
  40. if(!$in_db){
  41.     $sql = "INSERT INTO files (ID, nom, downloads, date) Values ('', '$file', '1', '$date')";
  42. ### Already downloaded
  43. }else{
  44.     $records = mysql_fetch_array($req);
  45.     $rec_download = ($records['downloads']+1);
  46.    
  47.     $sql = "UPDATE files SET downloads='$rec_download', date='$date' WHERE nom='$file'";
  48. }
  49. $db = mysql_connect($conf['host'], $conf['login'], $conf['password']);
  50. mysql_select_db($conf['base'],$db);
  51. $result = mysql_query($sql);
  52. ### Send file
  53. download($path,$file);
  54. mysql_close();

Profil : Pointeur
Plus d'informations

ligne 37, faut rajouter des controles
1/ que l'on ne tente pas de télécharger le fichier "telecharger.php" lui meme
2/ que le nom de fichier ne contienne pas "/" ou "\"


---------------
Da Bidz Triad©®™: Bidz Interceptor
.:: Smileyz version 4.2 [050625]::. -- Code source disponible sous licence GPL.
[u

Aller à :
Ajouter une réponse
  FORUM Tom's Hardware » Programmation » PHP & MySQL & ASP » [PHP] Faille dans mon code ! (telecharger.php)
 

Annonces Google
Publicité