faire une redirection header pour cacher une source

faire une redirection header pour cacher une source - PHP - Programmation

Marsh Posté le 04-07-2009 à 17:48:32    

Bonjour,
 
Je m'explique:  :)  mon lecteur vidéo flash permet de lire des vidéos au format flv et mp4. Il se présente comme celà:
 

Code :
  1. <script type="text/javascript">
  2. blablabla
  3. so.addParam('flashvars','&file=http://monsite.fr/mondossier/mavideo.flv&image=./img/monimage.jpg&blabla=etc&blabla2=etc2');
  4. blablabla
  5. </script>


 
On voit donc le lien direct vers la vidéo dans le code source. Je cherche à masquer cette adresse (je sais que c'est vain mais j'y tiens). Par exemple en la substituant par:
 
"http://monsite.fr/lirefichier.php?file=aHR06qsdqsdz8797sdklsjdlz87987blablablaetc678erke"
 
où "aHR06qsdqsdz8797sdklsjdlz87987blablablaetc678erke" serait une chaîne encodée en base64 ou autre.
 
 
 
 
 
il faudrait donc que lirefichier.php "décrypte" (base64_decode) la chaine passée en GET et renvoie le lien direct de la vidéo.
 
Comment procéder?
1) lirefichier.php doit-il simplement renvoyer une chaine de caractère (l'adresse direct de la vidéo)?
2) ou bien doit-on faire une redirection de type header() avec le ContentType qui va bien? (auquel cas j'aurai besoin d'une aide/piste)
 
 
 
Merci  :jap:

Reply

Marsh Posté le 04-07-2009 à 17:48:32   

Reply

Marsh Posté le 04-07-2009 à 17:57:33    

Ni un ni l'autre
 
Tu fais que ton lirefichier.php fasse un readfile sur le bon fichier, mette les headers qui vont bien, et là plus besoin d'url dans l'html :o


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 04-07-2009 à 18:03:34    

Quoi que tu fasses, en utilisant ton url lirefichier.php, on pourra accéder à l'url de ton média, sinon au code source du média.
 
Mais pour "protéger" un minimum ton code, tu peux externaliser le script dans un fichier .js et appeler une fonction js, ce qui sera probablement moins visible qu'un bout de code directement dans la source. N'hésites pas à donner un nom psychologique à cette fonction, du genre "securizeMedia(a15fsdsjhn58q9fc56q5)". Ca coute rien, et des fois ça fait peur ;)
 
Tu peux aussi envoyer, sur le modèle de ton fichier .php, une variable encodée en fonction du temps et n'autoriser le renvoit de l'url du média que si le temps est inférieur à un intervalle donné (une minute par exemple).
 
Enfin n'hésites pas à interdire l'accès direct au répertoire via un fichier .htaccess.


Message édité par CyberDenix le 04-07-2009 à 18:04:45

---------------
Directeur Technique (CTO)
Reply

Marsh Posté le 04-07-2009 à 18:43:58    

merci à vous.
 
en fait je ne cherche pas à protéger la vidéo, et de toute façon comme je l'ai précisé ce serait vain (facile à trouver avec Wireshark).
Je veux simplement masquer l'url.
 
De plus la vidéo est hostée sur un autre serveur, donc readfile laborieux à mettre en place.
 
Je voudrais vraiment passer par un fichier de type "lirevideo.php" avec l'adresse en argument GET
 
 :jap:

Reply

Marsh Posté le 04-07-2009 à 18:54:36    

Bon laissons tomber le fait pour enregistrer ta vidéo avec Wireshark faut vraiment avoir du temps à perdre (et connaître Wireshark).
 
readfile laborieux : A fond.... faut juste appeler l'url en question, et se gaffer que fopen wrappers soit enable :heink:
 
Donc, au lieu de t'amuser à encrypter tes trucs dans tous les sens, pourquoi tu mémorise pas tes URL dans une base de donnée/fichier XML/autre et tu passes juste un id à lirefichier?


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 04-07-2009 à 19:01:10    

oui pardon je pensais à readdir en écrivant readfile.  :o  
 
les url sont déjà dans une bdd. pourquoi ferais-je des requetes sql alors qu'un passage de l'adresse du fichier par l'url va très bien pour ce que je souhaite faire...
 
et même, admettons, xml ou bdd ou ce que tu veux, d'accord, tu me demandes de passer un id à lirefichier.php, ok, qu'est-ce que lirefichier va retourner? une chaine de caractère? c'est ma question du début en fait.

Reply

Marsh Posté le 04-07-2009 à 19:21:38    

Non mais bon, t'as 2 manières de faire :
 
- "sécuriser" ton URL en javascript comme CyberDenix l'a proposé. Le problème c'est qu'avec les bon outils dans ton navigateur, tu dévoiles l'URL en 5 secondes
- utiliser ma méthode, donc tu passes un id à ton fichier.php, ce dernier va chercher dans la bdd l'url (d''accord que les requêtes sont "lourdes" mais faut pas abuser, c'est pas un misérable select sur 1 champ qui va te plomber tes perf) et la passe à readfile, qui lui balance directement le tout à l'utilisateur
 
J'ai déjà utilisé ma méthode en prod é plusieurs reprises et j'ai jamais eu de feedback négatif :o


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 04-07-2009 à 20:47:43    

ok ok ok, je regarde du côté de readfile, j'avais pas tilté mais d'après la doc ça correspondrait bien à ce que je souhaite.
j'essaye tout de suite et je te dis ça.  :jap:

Reply

Marsh Posté le 04-07-2009 à 22:22:36    

donc je viens d'essayer ceci:

 


fichier lirevideo.php

Code :
  1. <?php
  2. if ( isset($_GET['play']) ){
  3.     $flv=base64_decode( htmlentities($_GET['play'], ENT_QUOTES) );
  4.     header('Content-Description: File Transfer');
  5.     header('Content-Type: application/octet-stream');
  6.     header('Content-Disposition: attachment; filename='.basename($flv));
  7.     header('Content-Transfer-Encoding: binary');
  8.     header('Expires: 0');
  9.     header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
  10.     header('Pragma: public');
  11.     header('Content-Length: ' . filesize($flv));
  12.     ob_clean();
  13.     flush();
  14.     readfile($flv);
  15.     exit;
  16. }
  17. else{
  18. echo'erreur';
  19. }
  20. ?>
 

qui ne passe pas dans le lecteur. En effet la vidéo n'est pas lue, par contre si je rentre dans mon navigateur lien de type lirevideo.php?play=jsldqjl7687687jlkjblablablaetcetcetcetc

 

et bien il me propose de le télécharger, naturellement (car "Content-Disposition: attachment" ).

 

que faut-il modifier pour autoriser le streaming de ce fichier?

 


autre question:

 

comme je fais un readfile du fichier, et que ce fichier est hébergé ailleurs sur un serveur de stockage, est-ce que c'est la bande-passante de ce dernier ou bien la bande passante du serveur qui heberge lirevideo.php qui est consommée?


Message édité par pimsa le 04-07-2009 à 22:23:52
Reply

Marsh Posté le 06-07-2009 à 13:57:49    

Tu peux mettre un base64 pour le lien de ton fichier, un critère temporel >=5sec pour son accès, puis une redirection 301 finale sur le fichier
( qui te permet au passage de compter les hits sur ce fichier )


---------------
Photos Panoramiques Montagnes Haute Savoie
Reply

Sujets relatifs:

Leave a Replay

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