Bonjour.
Je souhaite ne pas permettre l'accès à un répertoire de vidéos sauf quand la personne passe par le plugin Adobe Flash.
Via .htaccess, c'est possible?
De l'aide me serait utile c'est assez urgent. Merci.
Bonjour.
Je souhaite ne pas permettre l'accès à un répertoire de vidéos sauf quand la personne passe par le plugin Adobe Flash.
Via .htaccess, c'est possible?
De l'aide me serait utile c'est assez urgent. Merci.
Il faut que le plug-in Flash de lecture de la vidéo envoie dans sa requête au serveur une information spécifique pour permettre de différencier les requêtes classiques des requêtes faites par le player. On peut imaginer de vérifier le referer mais je n'en connais pas la valeur. Ensuite, une fois qu'on a l'élément différenciant on fait une protection hotlinking.
Genre une session sous PHP?
Je peux avoir un exemple, ça m'aiderait.
Merci.
Un exemple de quoi ? Genre ça ?
L'idée c'est de voir comment le player Flash peut être différencié d'un navigateur normal. Vérifier l'en-tête Referer (ce qu'on fait classiquement pour se protéger du hot linking : cf le lien que j'ai donné) peut permettre de faire cette différence mais ce n'est pas garanti. Tu peux aussi voir si l'en-tête User-Agent est différent. Ou encore, si c'est ton propre player, tu peux ajouter un paramètre d'URL dans tes requêtes qui permettra de faire la différence. Ou bien utiliser les sessions mais tout dépend de la manière dont les sessions sont créées et surtout les sessions valides ne pourront pas être vérifiées par Apache (il pourra juste vérifié que le cookie de session est présent, c'est tout).
Pour commencer, merci pour vos explications.
Ce que j'ai de fait jusqu'à maintenant, c'est d'aller chercher la vidéo à l'extérieur du docroot comme ceci :
Fichier getfile.php :
Si je vais sur getfile.php, la vidéo est appelée sans problème mais pour l'enregistrement sur le disque.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 <?php $filename = "/wamp/demo.flv"; header('Content-Type: video/x-flv'); header ( 'Content-Disposition: attachment; filename = demo.flv'); header('Length: ' . filesize($filename)); $fd = fopen($filename, "r"); while(!feof($fd)) { echo fread($fd, filesize($filename)); flush(); } fclose ($fd); ?>
Le plugins jwplayer 5.8 dont le code de mon fichier player.php :
D'après moi, c'est dans ce fichier qui a un manque. Le fichier fait bien la lecture seulement si je mets le nom demo.flv mais si je mets getflv.php?demo.flv, la ça dit que ce n'est pas le bon format.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 <script type='text/javascript' src='jwplayer.js'></script> <div id='mediaspace'>This text will be replaced</div> <script type='text/javascript'> jwplayer('mediaspace').setup({ 'flashplayer': 'player.swf', 'duration': '34', 'file': 'getflv.php?demo.flv', 'image': 'http://content.longtailvideo.com/videos/flvplayer.jpg', 'autostart': 'true', 'icons': 'false', 'stretching': 'fill', 'controlbar': 'bottom', 'width': '470', 'height': '320' }); </script>
Il faudrait que mon fichier player.php puisse aller chercher mon fichier vidéo à l'extérieur du docroot.
Rendu là, je ne sais pas comme je puisse faire.
Je comprends votre explication en bonne partie mais on suppose que mes vidéos sont situées dans le docroot. La meilleurs protection à mon avis contre la copie par le leech est de placer les fichiers à l'extérieur du docroot.
rendu là, je suis bloqué.
Pas nécessairement mais ça a l'avantage de pouvoir utiliser les sessions pour vérifier les autorisations d'accès dans getfile.php.
Pour savoir pourquoi le player se plaint il faudrait comparer les réponses du serveur lorsque tu appelles directement la vidéo et lorsque tu passes par getfile.php. Déjà, tu peux vérifier que lorsque tu demandes getfile.php tu as une requête envoyée au serveur par le player. Si le player ne fait aucune requête sur le serveur c'est que la syntaxe de l'URL ne lui plaît pas.
A ce que je sache, on peut lire un fichier qui est en dehors du web (public_html); par une commande PHP. Mais, les lecteurs vidéos, utilise les chemins web à l'intérieur de public_html/
Genre : http://.../ici
Mon poste n'est pas résolu pour le moment.
Et donc en quoi getfile.php n'est pas satisfaisant ?
Dans getfile.php, si tu retires l'en-tête Content-Disposition, est-ce que ça marche ?
Peux-tu, avec un outil du genre Live HTTP Headers, capturer les en-têtes renvoyés par ton serveur sur la requête getflv.php?demo.flv ?
Bien, ça indique une erreur que j'ai mis en bas.
le fichier player.php :
le fichier getfile.php :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 <script type='text/javascript' src='jwplayer.js'></script> <div id='mediaspace'>This text will be replaced</div> <script type='text/javascript'> jwplayer('mediaspace').setup({ 'flashplayer': 'player.swf', 'duration': '34', 'file': 'getfile.php?demo.flv', 'image': 'http://content.longtailvideo.com/videos/flvplayer.jpg', 'autostart': 'true', 'icons': 'false', 'stretching': 'fill', 'controlbar': 'bottom', 'width': '470', 'height': '320' }); </script>
L'erreur du player :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 <?php $filename = "/wamp/demo.flv"; header('Content-Type: video/x-flv'); //header ( 'Content-Disposition: attachment; filename = demo.flv'); header('Length: ' . filesize($filename)); $fd = fopen($filename, "r"); while(!feof($fd)) { echo fread($fd, filesize($filename)); flush(); } fclose ($fd); ?>
Task Queue failed at step 5: Playlist could not be loaded: Playlist file did not contain a valid playlist
Oui, le message d'erreur, on l'a déjà. Ce qui m'intéresse c'est ce qu'il se passe dans la communication entre Flash et ton serveur.
Tu peux faire une capture avec Wireshark, c'est ce qu'il y a de mieux car on voit vraiment le dialogue entre Flash et le serveur, et ensuite comparer cette trace avec la même chose quand ça marche (accès direct au fichier).
J'ai résolu le problème.
La provenance du problème vient du lecteur lui-même.
J'ai changé et les vidéos qui sont lus sont à l'extérieur
du répertoire web.
Ce lecteur fonctionne très bien avec getfile.php et avis à ceux qui cherche à faire comme moi.
J'ai testé WiresharkPortable-1.6.4.paf.exe et ça n'a pas été concluant pour moi.
Je peux maintenant lire des vidéos qui sont hors www.
Lecteur.html :
Getfile.php :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 <object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=10,0,0,0" width="320" height="240" id="KAWAplayer_v1" align="middle"> <param name="allowScriptAccess" value="sameDomain"/> <param name="allowFullScreen" value="true"/> <param name="movie" value="KAWAplayer_v1.swf"/> <param name="quality" value="high"/> <param name="bgcolor" value="#000000"/> <param name="flashvars" value="myMovie=getfile.php?demo.flv"/> <embed src="KAWAplayer_v1.swf" quality="high" bgcolor="#000000" width="320" height="240" name="KAWAplayer_v1" align="middle" allowScriptAccess="sameDomain" allowFullScreen="true" type="application/x-shockwave-flash" pluginspage="http://www.adobe.com/go/getflashplayer_fr" flashvars="myMovie=getfile.php?demo.flv"/> </object>
Merci _mac_ de m'avoir aidé.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 <?php $filename = "/wamp/demo.flv"; header('Content-Type: video/x-flv'); //header ( 'Content-Disposition: attachment; filename = demo.flv'); header('Length: ' . filesize($filename)); $fd = fopen($filename, "r"); while(!feof($fd)) { echo fread($fd, filesize($filename)); flush(); } fclose ($fd); ?>
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager