[newbie] Empecher le "vol" de bande passante

Empecher le "vol" de bande passante [newbie] - PHP - Programmation

Marsh Posté le 09-03-2006 à 03:39:03    

Bonjour à tous,
 
Je viens de mettre en place sur mon site un gestionnaire de téléchargement en php qui permet de télécharger des documentations.
 
Il y a un controle d'accès permettant aux seuls membres de mon site de télécharger les fichiers mais il est possible de les linker et donc que quelqu'un propose un de ces fichiers au téléchargement sur un autre site.
 
Comment faire pour qu'il soit impossible de télécharger ces fichiers d'un autre endroit que mon propre site ?
 
A noter: Les liens vers ces fichiers sont sous la forme: http://www.mondomain.com/fichierenquestion.xxx
 
Merci pour votre aide !

Reply

Marsh Posté le 09-03-2006 à 03:39:03   

Reply

Marsh Posté le 09-03-2006 à 09:34:21    

avec un .htaccess je pense


---------------
Gamertag: CoteBlack YeLL
Reply

Marsh Posté le 09-03-2006 à 10:02:42    

faire un .php que l'on telecharge (il telechargera le bon nom de fichier grace aux entetes) et que ce php flushe a la volée le fichier pdf en question.


---------------
CPU-Z | Timespy | Mes bd
Reply

Marsh Posté le 09-03-2006 à 10:05:03    

une possibilité :
un fichier dl.php
et tous tes téléchargements se font grace à ce fichier
 

Code :
  1. <?
  2. include('motdepasse.php'); //defini mon tableau $CONF
  3. if(!empty($_GET['f'])){
  4.     //TODO: rajouter tes tests ici
  5.     //pour voir si ton user à une session ouverte
  6.     //et qu'il est logué
  7. $file = $CONF['upload_path'].$_GET['f'];
  8. $size = filesize ($file);
  9. $saveName = basename ($file);
  10. header ('Expires: 0');
  11. header ('Last-Modified: ' .
  12. gmdate ('D, d M Y H:i:s', filemtime ($file)) . ' GMT');
  13. header ('Pragma: public');
  14. header ('Cache-Control: must-revalidate, post-check=0, pre-check=0');
  15. header ('Accept-Ranges: bytes');
  16. header ('Content-Length: ' . $size);
  17. header ('Content-Type: Application/octet-stream');
  18. header ('Content-Disposition: attachment; filename="' . $saveName . '"');
  19. header ('Connection: close');
  20. readfile ($file);
  21. }else{
  22. print('file missing');
  23. }
  24. ?>


---------------
http://poemes.iceteapeche.com - http://www.simuland.net
Reply

Marsh Posté le 09-03-2006 à 10:10:09    

au passage readfile est limité a 2Mo.


---------------
CPU-Z | Timespy | Mes bd
Reply

Marsh Posté le 09-03-2006 à 10:13:18    

...et au lieu d'un print('file missing') envoyer un 404 serait de bon aloy.[:aloy]


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 09-03-2006 à 14:48:20    

chaced a écrit :

au passage readfile est limité a 2Mo.


 
au passage,comment remedier a cette limite ?
merci

Reply

Marsh Posté le 09-03-2006 à 15:05:39    

fabs2b a écrit :

au passage,comment remedier a cette limite ?
merci


 
avec fopen et fread (en lisant par bloc le fread, pas tout d'un coup)


function readfile_chunked($filename,$retbytes=true)
  {
   $chunksize = 1024*1024; // how many bytes per chunk
   $buffer = '';
   $cnt =0;
   // $handle = fopen($filename, 'rb');
   $handle = fopen($filename, 'rb');
   if ($handle === false)
   {
     return false;
   }
   while (!feof($handle))
   {
     $buffer = fread($handle, $chunksize);
     echo $buffer;
     flush();
     if ($retbytes)
     {
       $cnt += strlen($buffer);
     }
   }
   $status = fclose($handle);
   if ($retbytes && $status)
   {
     return $cnt; // return num. bytes delivered like readfile() does.
   }
   return $status;
  }


Message édité par chaced le 09-03-2006 à 15:07:42

---------------
CPU-Z | Timespy | Mes bd
Reply

Marsh Posté le 09-03-2006 à 15:07:30    

faire passer un fichier de plusieurs méga à travers une fct php, c'est vraiment une bonne idée ? :s


---------------
Me: Django Localization, Yogo Puzzle, Chrome Grapher, C++ Signals, Brainf*ck.
Reply

Marsh Posté le 09-03-2006 à 15:09:50    

0x90 a écrit :

faire passer un fichier de plusieurs méga à travers une fct php, c'est vraiment une bonne idée ? :s


 
Non pas vraiement, mais une thread apache sera utilisée durant le telechargement, mais c'est aussi le cas avec un telechargement classique non ftp.
 


---------------
CPU-Z | Timespy | Mes bd
Reply

Marsh Posté le 09-03-2006 à 15:09:50   

Reply

Marsh Posté le 09-03-2006 à 17:03:40    

tu peux peut-etre vérifier le referer , et voir si c bien le meme domaine.

Reply

Marsh Posté le 09-03-2006 à 17:19:26    

benamoubeach a écrit :

tu peux peut-etre vérifier le referer , et voir si c bien le meme domaine.


ce qui reste bidouillable

Reply

Marsh Posté le 09-03-2006 à 17:39:38    

et ca reste incertain..

Reply

Marsh Posté le 09-03-2006 à 17:49:49    

j'ai pas dis que c'était propre et parfait :D

Reply

Marsh Posté le 09-03-2006 à 17:58:30    

Ba heureusement!  
Parce que tu fais quoi s'il est vide???

Reply

Marsh Posté le 09-03-2006 à 18:17:01    

et si l'utilisateur le modifie pour te faire croire que ça vient bien de ton domaine

Reply

Marsh Posté le 09-03-2006 à 19:00:01    

S'il est vide c'est comme s'il était incorrect, et si l'utilisateur le modifie... t'as déjà résolu 95% des problèmes d'hotlinking à minima donc tu t'en fous [:spamafote]


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 09-03-2006 à 19:23:37    

chaced a écrit :

au passage readfile est limité a 2Mo.


 
 
Hello,
 
je n'ai rien vu dans la doc php concernant cette limite.... Ce ne serai pas une limitation de ton hébergeur?? Meme si ca parait absurbe que ca passe avec le couple fopen/fread....

Reply

Marsh Posté le 09-03-2006 à 19:45:37    

masklinn a écrit :

S'il est vide c'est comme s'il était incorrect, et si l'utilisateur le modifie... t'as déjà résolu 95% des problèmes d'hotlinking à minima donc tu t'en fous [:spamafote]


et si c'est un naviguateur sauce maison qui bloque le referer, le mec peut pas accéder au site

Message cité 2 fois
Message édité par Djebel1 le 09-03-2006 à 19:45:57
Reply

Marsh Posté le 09-03-2006 à 20:20:35    

sub1 a écrit :

Hello,
 
je n'ai rien vu dans la doc php concernant cette limite.... Ce ne serai pas une limitation de ton hébergeur?? Meme si ca parait absurbe que ca passe avec le couple fopen/fread....


 
C'est moi meme mon hebergeur  :whistle:


---------------
CPU-Z | Timespy | Mes bd
Reply

Marsh Posté le 09-03-2006 à 21:17:19    

Djebel1 a écrit :

et si c'est un naviguateur sauce maison qui bloque le referer, le mec peut pas accéder au site


Ne peut pas accéder aux medias, faut être stupide pour bloquer les pages sur un referer


Message édité par masklinn le 09-03-2006 à 21:18:24

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 09-03-2006 à 21:25:40    

Djebel1 a écrit :

et si c'est un naviguateur sauce maison qui bloque le referer, le mec peut pas accéder au site


argument qui a autant de poids que de tenir compte de lynx pour faire un site web :lol:

Reply

Marsh Posté le 09-03-2006 à 21:32:09    

smaragdus a écrit :

argument qui a autant de poids que de tenir compte de lynx pour faire un site web :lol:


Lynx est un vrai navigateur [:mmmfff]


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 09-03-2006 à 21:33:32    

masklinn a écrit :

Lynx est un vrai navigateur [:mmmfff]


 
[:rofl] [:rofl] [:rofl]  

Reply

Marsh Posté le 09-03-2006 à 21:53:14    

chaced a écrit :

C'est moi meme mon hebergeur  :whistle:


 
Donc après avoir testé ca :
 

Code :
  1. <?php
  2. $file = 'http://test-debit.free.fr/4096.rnd';
  3. header('Content-Type: application/force-download');
  4. header('Content-Disposition: attachment; filename="'.basename($file).'"');
  5. header("Content-Transfer-Encoding: binary" );
  6. readfile($file);
  7. ?>


 
je vois que ca vient de ton hébergeur....  ;)

Reply

Marsh Posté le 10-03-2006 à 00:55:35    

Merci pour vos réponses. Petite précision, certains fichiers dépassent les 60 Mo.
 
Je me dit que le plus simple serait de passer par un .htaccess. J'ai fait quelques essais mais je n'ai pas réussi a faire fonctionner le truc correctement. (Ca bloque tout ou rien).

Reply

Marsh Posté le 10-03-2006 à 01:00:19    

benamoubeach a écrit :

tu peux peut-etre vérifier le referer , et voir si c bien le meme domaine.


 
Alors encore une précision, mon script affiche la liste des fichiers présents dans un répertoire, avec des liens vers ces fichiers et les sous répertoires pour la navigation.
 
C'est donc ultra newb, mais ca permet d'updater en rajoutant simplement des fichiers sur le ftp... Donc si il était possible de vérifier le referrer seulement via le .htaccess, ca serait magnifique.

Reply

Marsh Posté le 10-03-2006 à 04:29:30    

tu peux faire en sorte que si ton truc n'est pas télécharger sur ton site tu redirige


---------------
“ Un avis d’un homme non avisé ne doit jamais être pris en compte par un homme avisé. ” Jean Plancher, 1810, Taverne « Chez Bonaparte »
Reply

Marsh Posté le 10-03-2006 à 09:39:41    

sub1 a écrit :

Donc après avoir testé ca :
 

Code :
  1. <?php
  2. $file = 'http://test-debit.free.fr/4096.rnd';
  3. header('Content-Type: application/force-download');
  4. header('Content-Disposition: attachment; filename="'.basename($file).'"');
  5. header("Content-Transfer-Encoding: binary" );
  6. readfile($file);
  7. ?>


 
je vois que ca vient de ton hébergeur....  ;)


 
Il faut etre en php > 5.0.4 pour que ça fonctionne ;)
 
http://bugs.php.net/bug.php?id=32970


Message édité par chaced le 10-03-2006 à 09:40:56

---------------
CPU-Z | Timespy | Mes bd
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed