IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Apache Discussion :

[.htaccess] Interdire l'accès direct à un répertoire sauf via flash


Sujet :

Apache

  1. #1
    Membre actif Avatar de dancom5
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    808
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55

    Informations forums :
    Inscription : Janvier 2010
    Messages : 808
    Points : 241
    Points
    241
    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.
    On oublie souvent la simplicité ou la base dans la vie: Maslow

  2. #2
    Rédacteur
    Avatar de _Mac_
    Profil pro
    Inscrit en
    Août 2005
    Messages
    9 601
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 9 601
    Points : 12 977
    Points
    12 977
    Par défaut
    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

  3. #3
    Membre actif Avatar de dancom5
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    808
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55

    Informations forums :
    Inscription : Janvier 2010
    Messages : 808
    Points : 241
    Points
    241
    Par défaut
    Genre une session sous PHP?

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

    Merci.
    On oublie souvent la simplicité ou la base dans la vie: Maslow

  4. #4
    Rédacteur
    Avatar de _Mac_
    Profil pro
    Inscrit en
    Août 2005
    Messages
    9 601
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 9 601
    Points : 12 977
    Points
    12 977
    Par défaut
    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

  5. #5
    Membre actif Avatar de dancom5
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    808
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55

    Informations forums :
    Inscription : Janvier 2010
    Messages : 808
    Points : 241
    Points
    241
    Par défaut
    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
    On oublie souvent la simplicité ou la base dans la vie: Maslow

  6. #6
    Rédacteur
    Avatar de _Mac_
    Profil pro
    Inscrit en
    Août 2005
    Messages
    9 601
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 9 601
    Points : 12 977
    Points
    12 977
    Par défaut
    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

  7. #7
    Membre actif Avatar de dancom5
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    808
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55

    Informations forums :
    Inscription : Janvier 2010
    Messages : 808
    Points : 241
    Points
    241
    Par défaut
    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 : 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); 
    ?>
    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 : 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>
    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é.
    On oublie souvent la simplicité ou la base dans la vie: Maslow

  8. #8
    Rédacteur
    Avatar de _Mac_
    Profil pro
    Inscrit en
    Août 2005
    Messages
    9 601
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 9 601
    Points : 12 977
    Points
    12 977
    Par défaut
    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

  9. #9
    Membre actif Avatar de dancom5
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    808
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55

    Informations forums :
    Inscription : Janvier 2010
    Messages : 808
    Points : 241
    Points
    241
    Par défaut
    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.
    On oublie souvent la simplicité ou la base dans la vie: Maslow

  10. #10
    Rédacteur
    Avatar de _Mac_
    Profil pro
    Inscrit en
    Août 2005
    Messages
    9 601
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 9 601
    Points : 12 977
    Points
    12 977
    Par défaut
    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

  11. #11
    Membre actif Avatar de dancom5
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    808
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55

    Informations forums :
    Inscription : Janvier 2010
    Messages : 808
    Points : 241
    Points
    241
    Par défaut
    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.
    On oublie souvent la simplicité ou la base dans la vie: Maslow

  12. #12
    Rédacteur
    Avatar de _Mac_
    Profil pro
    Inscrit en
    Août 2005
    Messages
    9 601
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 9 601
    Points : 12 977
    Points
    12 977
    Par défaut
    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

  13. #13
    Membre actif Avatar de dancom5
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    808
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55

    Informations forums :
    Inscription : Janvier 2010
    Messages : 808
    Points : 241
    Points
    241
    Par défaut
    Bien, ça indique une erreur que j'ai mis en bas.


    le fichier player.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>
    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
    <?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 Images attachées  
    On oublie souvent la simplicité ou la base dans la vie: Maslow

  14. #14
    Rédacteur
    Avatar de _Mac_
    Profil pro
    Inscrit en
    Août 2005
    Messages
    9 601
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 9 601
    Points : 12 977
    Points
    12 977
    Par défaut
    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

  15. #15
    Membre actif Avatar de dancom5
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    808
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55

    Informations forums :
    Inscription : Janvier 2010
    Messages : 808
    Points : 241
    Points
    241
    Par défaut
    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 : 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>
    Getfile.php :
    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); 
    ?>
    Merci _mac_ de m'avoir aidé.
    On oublie souvent la simplicité ou la base dans la vie: Maslow

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Htaccess] Protéger l'accès direct à un dossier
    Par sami_c dans le forum Apache
    Réponses: 2
    Dernier message: 10/01/2007, 00h26
  2. Interdire l'acces directe aux fichiers php
    Par Never dans le forum Apache
    Réponses: 4
    Dernier message: 04/12/2006, 21h00
  3. Réponses: 1
    Dernier message: 31/10/2006, 12h13
  4. htaccess : interdire l'accès direct aux fichiers php
    Par Cédricss dans le forum Apache
    Réponses: 5
    Dernier message: 08/10/2006, 11h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo