Se connecter avec
S'enregistrer | Connectez-vous

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

Dernière réponse : dans Programmation

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

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

Autres pages sur : php faille code telecharger php

Lassé par la pub ? Créez un compte
Lassé par la pub ? Créez un compte