Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > Serveurs (Apache, IIS,...) > Apache
Apache Forum d'entraide Apache. Avant de poster : Cours Apache, FAQ Apache
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 03/12/2011, 08h19   #1
Membre du Club
 
Inscription : janvier 2010
Messages : 317
Détails du profil
Informations forums :
Inscription : janvier 2010
Messages : 317
Points : 62
Points : 62
Par défaut [.htaccess] Interdire l'accès direct à un répertoire sauf via flash

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.
__________________
dancom5 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/12/2011, 22h44   #2
Rédacteur/Modérateur
 
Avatar de _Mac_
 
Inscription : août 2005
Messages : 8 297
Détails du profil
Informations forums :
Inscription : août 2005
Messages : 8 297
Points : 8 580
Points : 8 580
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.
__________________

Du détail, du détail, du détail !!!
Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute
_Mac_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/12/2011, 23h44   #3
Membre du Club
 
Inscription : janvier 2010
Messages : 317
Détails du profil
Informations forums :
Inscription : janvier 2010
Messages : 317
Points : 62
Points : 62
Genre une session sous PHP?

Je peux avoir un exemple, ça m'aiderait.

Merci.
__________________
dancom5 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/12/2011, 09h58   #4
Rédacteur/Modérateur
 
Avatar de _Mac_
 
Inscription : août 2005
Messages : 8 297
Détails du profil
Informations forums :
Inscription : août 2005
Messages : 8 297
Points : 8 580
Points : 8 580
Un exemple de quoi ? Genre ça ?
__________________

Du détail, du détail, du détail !!!
Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute
_Mac_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/12/2011, 10h28   #5
Membre du Club
 
Inscription : janvier 2010
Messages : 317
Détails du profil
Informations forums :
Inscription : janvier 2010
Messages : 317
Points : 62
Points : 62
Je cherchais une précision sur :

Citation:
Envoyé par _Mac_ Voir le message
Il faut que le plug-in Flash de lecture de la vidéo envoie dans sa requête au serveur une information spécifique
__________________
dancom5 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/12/2011, 21h45   #6
Rédacteur/Modérateur
 
Avatar de _Mac_
 
Inscription : août 2005
Messages : 8 297
Détails du profil
Informations forums :
Inscription : août 2005
Messages : 8 297
Points : 8 580
Points : 8 580
Citation:
Envoyé par _Mac_ Voir le message
On peut imaginer de vérifier le referer mais je n'en connais pas la valeur.
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).
__________________

Du détail, du détail, du détail !!!
Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute
_Mac_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/12/2011, 02h37   #7
Membre du Club
 
Inscription : janvier 2010
Messages : 317
Détails du profil
Informations forums :
Inscription : janvier 2010
Messages : 317
Points : 62
Points : 62
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 :
Code :
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); 
?>
Si je vais sur getfile.php, la vidéo est appelée sans problème mais pour l'enregistrement sur le disque.

Le plugins jwplayer 5.8 dont le code de mon fichier player.php :
Code :
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>
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.

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é.
__________________
dancom5 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/12/2011, 10h41   #8
Rédacteur/Modérateur
 
Avatar de _Mac_
 
Inscription : août 2005
Messages : 8 297
Détails du profil
Informations forums :
Inscription : août 2005
Messages : 8 297
Points : 8 580
Points : 8 580
Citation:
Envoyé par dancom5 Voir le message
La meilleurs protection à mon avis contre la copie par le leech est de placer les fichiers à l'extérieur du docroot.
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.
__________________

Du détail, du détail, du détail !!!
Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute
_Mac_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/01/2012, 15h55   #9
Membre du Club
 
Inscription : janvier 2010
Messages : 317
Détails du profil
Informations forums :
Inscription : janvier 2010
Messages : 317
Points : 62
Points : 62
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.
__________________
dancom5 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/01/2012, 21h19   #10
Rédacteur/Modérateur
 
Avatar de _Mac_
 
Inscription : août 2005
Messages : 8 297
Détails du profil
Informations forums :
Inscription : août 2005
Messages : 8 297
Points : 8 580
Points : 8 580
Et donc en quoi getfile.php n'est pas satisfaisant ?
__________________

Du détail, du détail, du détail !!!
Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute
_Mac_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/01/2012, 21h28   #11
Membre du Club
 
Inscription : janvier 2010
Messages : 317
Détails du profil
Informations forums :
Inscription : janvier 2010
Messages : 317
Points : 62
Points : 62
Citation:
Envoyé par _Mac_ Voir le message
Et donc en quoi getfile.php n'est pas satisfaisant ?
Le fichier en lui-même appelle bien la vidéo mais pas pour l'appeler à travers un lecteur pour lire la vidéo. Ça pas marché avec ce que j'avais.

Peut-être qu'à travers un autre lecteur, ça aurait marché.

ça disait que getfile.php n'est pas le bon format.
__________________
dancom5 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/01/2012, 21h46   #12
Rédacteur/Modérateur
 
Avatar de _Mac_
 
Inscription : août 2005
Messages : 8 297
Détails du profil
Informations forums :
Inscription : août 2005
Messages : 8 297
Points : 8 580
Points : 8 580
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 ?
__________________

Du détail, du détail, du détail !!!
Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute
_Mac_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/01/2012, 22h22   #13
Membre du Club
 
Inscription : janvier 2010
Messages : 317
Détails du profil
Informations forums :
Inscription : janvier 2010
Messages : 317
Points : 62
Points : 62
Bien, ça indique une erreur que j'ai mis en bas.


le fichier player.php :

Code :
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>
le fichier getfile.php :
Code :
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); 
?>
L'erreur du player :
Task Queue failed at step 5: Playlist could not be loaded: Playlist file did not contain a valid playlist
Images attachées
Type de fichier : jpg getfile.jpg (10,8 Ko, 1 affichages)
__________________
dancom5 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/01/2012, 10h37   #14
Rédacteur/Modérateur
 
Avatar de _Mac_
 
Inscription : août 2005
Messages : 8 297
Détails du profil
Informations forums :
Inscription : août 2005
Messages : 8 297
Points : 8 580
Points : 8 580
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.
Citation:
Envoyé par _Mac_ Voir le message
capturer les en-têtes renvoyés par 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).
__________________

Du détail, du détail, du détail !!!
Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute
_Mac_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/01/2012, 14h32   #15
Membre du Club
 
Inscription : janvier 2010
Messages : 317
Détails du profil
Informations forums :
Inscription : janvier 2010
Messages : 317
Points : 62
Points : 62
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 :

Code :
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>
Getfile.php :
Code :
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); 
?>
Merci _mac_ de m'avoir aidé.
__________________
dancom5 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 18h00.


 
 
 
 
Partenaires

Hébergement Web